2014-05-22 124 views
1

作爲一個例子,假設我正在爲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的正確簽名是什麼?那麼我的下一個問題是:如果vec的類型爲std::vector<weak_ptr<Bar>>,函數myPushBack的正確簽名是什麼?

+1

通用參考如何? – chris

回答

6

假設你正在使用C++ 11,你應該使用完美轉發成語:

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

既然是一個模板,不要緊的實際類型的載體。它甚至會考慮隱式轉換,例如const char*std::string

相關問題