2011-08-17 79 views
0

我有一個簡單的混合,我正在混合到我的其他模板類。模板定義順序問題

template<typename T> class mixin { 
    static T* null() { return nullptr; } 
    auto func() -> decltype(null()->func()); 
}; 
template<...> class A : public mixin<A<...>> { 
    .... 
}; 
template<...> class B : public mixin<A<...>> { 
    .... 
}; 
template<...> class C : public mixin<A<...>> { 
    .... 
}; 

現在,我有一個問題。其中一個mixin函數將返回一個必須根據派生類型推導出來的類型。但是,當我嘗試使用演繹來找到這種類型時,編譯器告訴我我正在使用一個未定義的類型。如果我將mixin的定義移動到類之後,那麼在混合時我將無法從它繼承。在這種情況下,如何更改我的類以允許類型扣除?

+1

難道不該`自動FUNC() - >的...``而不是void`? – 2011-08-17 17:13:44

回答

1

我不相信有什麼辦法可以做到這一點。每個類的類型之間有循環依賴關係。 A需要定義mixin<A<...>>mixin<A<...>>需要定義A

在我看來,你最好只是在mixin參數中手動指定類型。

例如:

template<typename ReturnType> class mixin 
{ 
    auto func() -> ReturnType; 
}; 

template<...> class A : public mixin<int> 
{ 
    int func(); 
}; 
+0

工作。謝謝! – Puppy 2011-08-17 20:23:48