【问题标题】:Simple Argument Forwarding (what should my signature be?)简单参数转发(我的签名应该是什么?)
【发布时间】:2014-05-22 16:15:41
【问题描述】:

例如,假设我正在为向量的 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&lt;weak_ptr&lt;Bar&gt;&gt;,那么函数 myPushBack 的正确签名是什么?

【问题讨论】:

  • 通用参考怎么样?

标签: c++ arguments weak-ptr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2021-12-06
    • 2011-01-10
    相关资源
    最近更新 更多