【问题标题】:How do I use named constructors in C++ using constructor delegates?如何使用构造函数委托在 C++ 中使用命名构造函数?
【发布时间】:2016-11-03 09:08:12
【问题描述】:

假设我有一个构造函数和一个委托构造函数

SomeClass(const std::string&& _name) : obj_needs_construction(100), name(_name) {}
SomeClass(const std::string& _name) : SomeClass(_name) {}

但是两者都使用相同的类型,我见过很多解决方案,但它们似乎都可以运行,因为它们使用不同的类型,但在我的情况下不起作用。我该如何解决这个问题?

谢谢。

【问题讨论】:

  • const std::string&& 非常没用。你想达到什么目的?
  • 如果我只是将该字符串用于构造函数,我应该不再需要它了吗?或者它会被优化掉吗?

标签: c++ class types constructor delegation


【解决方案1】:

替换

SomeClass(const std::string&& _name) : obj_needs_construction(100), name(_name) {}
SomeClass(const std::string& _name) : SomeClass(_name) {}

… 只需

SomeClass( std::string const& name )
    : obj_needs_construction( 100 )
    , name_( name )
{}

就是这样。它可以很好地作为实际参数的临时参数。

【讨论】:

  • 我的示例只包含一个构造函数,但实际上我还有很多,为了清理代码,我正在使用委托构造函数,所以这就是我不只使用它的原因。
  • 好吧,你不会得到关于你甚至没有提到的问题的答案。
【解决方案2】:
SomeClass(const std::string& _name) : SomeClass(std::move(_name)) {}

【讨论】:

  • 这可行,但可能不值得使用委托,因为它使我的代码更加混乱,这与我的目标相反。
  • @ThomasStiteler,这是你的电话。
  • 选择作为答案,因为即使我不会使用委托,这也是答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2016-01-16
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多