举个例子,假设我正在为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>>
的正确签名是什么?
答案 0 :(得分:6)
假设您使用的是C ++ 11,则应使用完美转发成语:
template<typename T> void Foo::MyPushBack(T &&b)
{
vec.push_back(std::forward<T>(b));
}
由于它是一个模板,因此矢量的实际类型无关紧要。它甚至会考虑隐式转化,例如const char*
到std::string
。