關於模板實例化和繼承,我一直面臨着一個很大的挑戰(至少對我而言)。讓我們來看看下面的代碼:C++模板挑戰
class Convertible
{
public:
template<class T>
T* AsPtrTo()
{
return reinterpret_cast<T*>(this);
}
};
template<class T>
class TemplateBase : public Convertible
{
};
template<class T>
class TemplateDerived : public TemplateBase<T>
{
public:
void Method1(TemplateBase<T> t)
{
t.AsPtrTo<int>(); // <<<<<< ERROR
}
};
int main()
{
TemplateDerived<int> d;
TemplateBase<int> b;
d.Method1(b);
return 0;
}
正如你所看到的,還有一類,稱爲轉換,與執行一個類型轉換隻是一個模板方法。還有一個從Convertible繼承的模板類,然後是從前一個繼承的另一個模板類。最後一個模板類實現了一個方法,該方法使用模板方法AsPtrTo,該方法在編譯期間應該從Convertible繼承,並在編譯期間用於主函數中的類型T.
由於某種原因,我不明白,這失敗了。 GCC 4.4.1給我這個消息:
error: expected primary-expression before 'int'
我已經標記了錯誤的行。
我想也許這裏的一位C++專家可以幫我一把。
謝謝大家提前!
「'return reinterpret_cast(this)''你不是那麼做,是嗎? –
curiousguy
2011-12-19 05:49:14