【问题标题】:C++ Method chaining with classesC++ 方法链与类
【发布时间】:2013-09-10 17:13:17
【问题描述】:

我正在尝试进行方法链接,但是,我想要一个类的构造函数(从基类继承),而不是使用“Foo”中的方法:

class Bar {

public: 

Bar() {
    std::cout << "This is bar";
}

 };

 class Foo : public Bar {

    public:
    Foo() {
        cout << "This is foo";
    }
 };

所以我的主要内容如下所示:

Foo f = Foo().Bar();

为什么这在 C++/C++11 中是不可能的?另外,有没有一种方法可以整合这个标准,或者我必须在“Foo”中创建一个方法来调用“Bar”的构造函数?

编辑:

class Bar {
public: 
Bar() {
}

Bar& Options() {
    cout << "sf";
    return *this;
}
 };

class Foo : public Bar {

public:
    Foo() {

    }
  }; 

然后在 main:

Foo F = Foo().Options();

【问题讨论】:

  • 你为什么要这样做?对Foo() 的调用已经调用Bar()
  • @juanchopanza 很抱歉造成混乱,请查看我的编辑,这就是我想做的。这可能吗?
  • 您可以使用Foo F; F.Options();Foo().Options() - 但不能同时使用。
  • @MatsPetersson 我真的希望/需要将其作为方法链。嗯。有没有办法做到这一点?
  • 你想要完成什么?不是链接的东西,而是潜在的问题。事实上,这是一个 X-Y 问题。

标签: c++ oop c++11 method-chaining


【解决方案1】:

您更新的问题是非法的,因为 Bar::Options() 返回对 Bar 的引用,而您没有提供将 Bar 转换为 Foo 对象的方法。

【讨论】:

  • 他可以让 Bar::Options 使用 CRTP 返回一个 Foo&。
  • @FrançoisMoisan - 我所有的编译器都抱怨无法从 Bar& 转换为 Foo。这就是为什么我以我的方式表达答案的原因。是的,他本可以使用 CRTP。这是一个高级话题。你认为提问者知道这意味着什么吗?
  • @DavidHammen 谢谢。和弗朗索瓦 - 我将尝试使用 CRTP 并看看我在哪里 :)
  • @David Hammen 我只是在建议替代方案。这与您的评论无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 2012-06-03
相关资源
最近更新 更多