派生クラスの基本クラスとして動作するクラステンプレートがあります。そのアイデアは、CRTPのトリックを通して "静的多型"を利用することでした。派生テンプレートクラスオブジェクトのインスタンス化
#include <iostream>
template <typename T>
class BASE
{
public:
void write() {static_cast<T*>(this)->write(); }
};
class DER1 : public BASE<DER1>
{
public:
void write(){
std::cout << "Calling write() inside DER1 " << number << std::endl;}
private:
int number = 11;
};
派生クラスオブジェクトをインスタンス化する2つの方法を試しましたが、2つの方法のいずれかが正しくないことがわかりました。しかし、なぜ私は理解できませんでした。実際に
int main(void) {
BASE<DER1> der1_objA ;
der1_objA.write();
DER1 der1_objB ;
der1_objB.write();
return 0;
}
問題がどこにあるか誰が私を説明でき、私は出力
Calling write() inside DER1 1880535040 [ random number]
Calling write() inside DER1 11 [correct number ]
として取得しますか? ありがとうございます。
静的キャストあなたが実際にベースのサブオブジェクトである場合にのみ定義されます。 –
'BASE'インスタンスには 'DER1'インスタンスはありませんが、それ自体が何かにキャストしようとする' BASE'だけ –
user463035818
スライシング。 – user0042