Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[C++]「自分自身のクラス」へのキャスト関数?

Q&A

Closed

class Base {
public:
    Base& procA();
    template<typename T> T castTo();
};
class Derived : public Base {
public:
    Derived& procB();
};

void main() {
    Base()
    .castTo<Derived>()
    .procA()
    .procB();   // エラー: No member named 'procB' in 'Base'
}

こういう感じでメソッドチェーンみたいなことをしたい時に、procAがBaseクラスのインスタンスを返すためにprocBが呼べない。
procAが、Baseクラスから呼んだときはBaseクラスのインスタンスを、Derivedクラスから呼んだときはDerivedクラスのインスタンスを返すようにできないだろうか。
(もしくは他の方法でも、このmain関数が動くようになればそれで良い)

ちなみにDerivedクラスでもprocAメソッドを宣言及び実装すればもちろん動くことは動くのだが、メソッドや派生クラスが増えるたびに記述量が膨れ上がっていくのを問題に感じている。
できればBaseクラスをいじるだけで完結したい。


と、自分で整理しつつ書いていると、なかなか望み薄な感じもしてきたんですが、何かヒントをお持ちの方がいれば教えていただきたいです〜。

0

1Answer

Comments

  1. @nariakiiwatani

    Questioner

    おー!いけそうですね。実装してみます。ありがとうございます!
  2. @nariakiiwatani

    Questioner

    難なくいけました〜。ありがとうございました!

Your answer might help someone💌