我試圖創建一個具有裏面一個未定義類CRTP類的CRTP內部類型---由派生類中定義,因爲這樣的:定義模板類型
#include <memory> // unique_ptr
template<typename T>
class crtp
{
public:
class inside;
crtp();
std::unique_ptr<inside> m;
};
這適用於非模板數據類型。
但是,如果我試圖傳遞給它一個模板類,例如:
template<>
template<typename T>
class crtp<test::TestClass<T>>::inside
{
public:
inside()
{
std::cout << "Instantiated." << std::endl;
}
};
它提供了以下錯誤:
error: invalid class name in declaration of ‘class crtp<test::TestClass<T> >::inside’
我用gcc 4.6.1。
我在這裏錯過了什麼?我覺得它與模板實例化有關,但我不確定我應該尋找什麼。
編輯:澄清,像crtp的構造函數已經在其他地方定義(我應該發佈它?它只是初始化unique_ptr)。我想要專門做的唯一事情就是內部類的定義。
您能否更詳細地描述您爲什麼使用CRTP?你想創建一個'std :: unique_ptr'你可以在哪裏傳遞'T'?我不明白內部課堂的必要性。 –
TemplateRex
2012-07-25 06:24:37
基本上,我試圖讓它有一個不同的內部類,這裏有一個通用接口,在這種情況下派生類(TestClass)可以訪問。一個可能更好的比較是像pimpl設置,其中內部包含該類的實際私人工作。 – Kozaki 2012-07-25 17:32:56