1
我有這個CRTP與缺失是「不一定」在基類中實現的方法不完整的子類:CRTP編譯,但我不想。怎麼樣?
#include <iostream>
using namespace std;
template<class T>
class BaseA
{
public:
T& asChild(){return static_cast<T&>(*this);}
void AMethod(void) {asChild().AMethod();}
};
class IncompleteChild : public BaseA<IncompleteChild>
{
public:
// uncomment the following to avoid segfault:
// void AMethod(void) {cout << "IncompleteChild Method" << endl;}
};
class Child : public BaseA<Child>
{
public:
void AMethod(void) {cout << "Child AMethod" << endl;}
};
template<class T>
void printBaseA(BaseA<T>& a)
{
a.AMethod();
}
int main()
{
IncompleteChild cI;
cI.AMethod();
printBaseA(cI);
return 0;
}
編譯沒有問題,但在分割故障導致在運行時。我怎樣才能避免這種情況?我寧願在這裏編譯錯誤(使用gcc 4.6.3)。
我首先想到這會很麻煩,因爲我不得不處理2套方法,但我錯了。調用子類AMethod確實會依次調用實現,並且基類可以具有默認實現。謝謝! – Christoph