template <class T>
void foo(T * ptr){
...a lot of code ...
if(std::is_base_of<Bar<T>,T>::value){
Bar<T> & bar = *ptr;
...a lot of code ...
}
...a lot of code
}
私はバーのサブクラスであると、この関数をコンパイルしていた場合、すべてが正常に動作しますが、私は使用してコンパイルしようとした場合そうではありません。
Bar<T> & bar = *ptr;
行です。 T
がBar<T>
のサブクラスではないときにこの行が実行されるので、これはどうですか? これが一般的な方法でない場合は、どうすれば正しい方法でこれを達成できますか?
「を実行しない」「コンパイルされていない」と同じではありません。 –
これはテンプレートであり、テンプレートの初期化を停止する条件があっても、コンパイラはそのためのコードを生成する必要があります。 – Rakete1111
ああありがとうございます。私はこれをどのようにして正しい方法で行うことができますか? – Exagon