1

例如,假设我正在为向量的 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();
}

我的问题是该函数的正确签名是什么myPushBackmyPushBack那么我的下一个问题是,如果vec是 type ,函数的正确签名是什么std::vector<weak_ptr<Bar>>

4

1 回答 1

6

假设你使用的是 C++11,你应该使用完美的转发习惯:

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

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

于 2014-05-22T16:26:37.597 回答