2014-05-22 1 views
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(); 
} 

제 질문은 기능에 대한 올바른 서명은 무엇입니까? myPushBack? 그렇다면 다음 질문은 myPushBackvecstd::vector<weak_ptr<Bar>> 인 경우 함수의 올바른 서명이 무엇입니까? 이 템플릿이기 때문에이 벡터의 실제 유형을 중요하지 않습니다,

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

:

+1

범용 참조는 어떻습니까? – chris

답변

6

당신이 C++ 11 사용하고 있다고 가정하면, 당신은 완벽한 전달 관용구를 사용해야합니다. const char* ~ std::string과 같은 암시 적 전환도 고려됩니다.