derived<T>
クラスの*this
がまだbase<T>
タイプの理由は何ですか?* thisを返すメンバー関数を継承する
私はtypename X
がそれを処理すると思っていました。
これが醜い場合は、より良い方法はありますか?
未遂:
template <typename T>
class Derived;
template <typename T, typename X>
class Base{
public:
T val;
X f(void){
return *this;
}
};
template <typename T>
class Derived: public Base<T, Derived<T> >{
};
int main(void){
Derived<int> B;
Derived<int> C = B.f();
}
がエラー:
test4.cpp(9): error: no suitable user-defined conversion from "Base<int, Derived<int>>" to "Derived<int>" exists
return *this;
^
detected during instantiation of "X Base<T, X>::f() [with T=int, X=Derived<int>]" at line 20
compilation aborted for test4.cpp (code 2)
'f'は' Base'のメンバ関数なので '* this'は' Base'型です。 –
_派生したクラスの* thisがまだ型のベースであるのはなぜですか? "__ static_cast < > '?? –
あなたのアサーションは真実ではありません。問題の 'this 'は明らかに' Base'内で発生します。 –