假設我有一個類,可以採取類型和參數varadic號:如何專門化0可變參數的可變參數模板類?
template <typename T, typename... Args>
class B
{
T<Args...> x;
};
該類構成了一個別名類型,這將是這樣的基礎:
template <typename... Args>
using AliasedType = B<T, Args...>;
但有些情況下,T
類型不是模板,在這種情況下,可變包的長度將爲0.但是,class B
仍會嘗試使用一組空模板參數聲明此類型的實例,從而導致錯誤。因此,要解決這個問題,我試圖創造B
模板專業化的,完全不varadic參數都:
template <typename T>
class B<T>
{
T x;
};
但這似乎並沒有工作。
爲了說明工作示例問題:
class A
{
};
template <typename T, typename... Args>
class B
{
T<Args...> x;
};
template <typename T>
class B<T>
{
T x;
};
main() {
B<A> a;
}
輸出是:
error: ‘T’ is not a template T<Args...> x;
爲什麼沒有這個解決的特殊版本,接受非模板類型?我確信我在這裏錯過了一些非常明顯的東西......看起來像一個空的可變模板包不像我以前所想的那樣被解析爲「無」。
你寫的代碼沒有意義。如果'T'是一種類型,則不能有'T'。 –
2014-10-02 23:32:25
@KerrekSB好點.. – arman 2014-10-02 23:33:41
顯然你可以用模板模板參數編寫一些*代碼,但是我完全不清楚你想要實現什麼,或者爲什麼。 – 2014-10-02 23:34:21