简单的论证转发(我的签名应该是什么?)

时间:2014-05-22 16:15:42

标签: c++ arguments weak-ptr

举个例子,假设我正在为vector的push_back方法编写一个瘦包装器。

class Foo
{
public:
   void myPushBack(Bar b);   // Line in question
private:
   std::vector<Bar> vec;
}

void Foo::MyPushBack(bar b)
{
   vec.push_back(bar);
}

main()
{
   Foo f();
   f.myPushBack();
}

我的问题是函数myPushBack的正确签名是什么?那么我的下一个问题是,如果myPushBack类型为vec,那么函数std::vector<weak_ptr<Bar>>的正确签名是什么?

1 个答案:

答案 0 :(得分:6)

假设您使用的是C ++ 11,则应使用完美转发成语:

template<typename T> void Foo::MyPushBack(T &&b)
{
   vec.push_back(std::forward<T>(b));
}

由于它是一个模板,因此矢量的实际类型无关紧要。它甚至会考虑隐式转化,例如const char*std::string