要我提出的問題here,我使用一個通用的模式是這樣解決我的問題的建議:需求定義
template <class... T>
class C;
template <>
class C<>
{
public:
void f() {}
};
template <class T, class... Args>
class C<T, Args...> : public C<Args...>
{
public:
using C<Args...>::f;
void f(const T& t) { /*stuff*/ }
};
現在,我不完全理解爲什麼這種模式必須是這樣的,所以我試圖通過一個關於它如何工作的假設來適應它。在適應我想結束在基本情況下,遞歸1個也不是0模板參數,所以我改變了代碼片段如下:
template <class V, class... >
class C;
template <class V>
class C
{
public:
void f() {}
};
template <class V, class T, class... Args>
class C<V, T, Args...> : public C<V, Args...>
{
public:
using C<Args...>::f;
void f(const T& t) { /*stuff*/ }
};
這裏V
應該繼續獲得通過,直到Args...
是空的,那麼
template <class V>
class C
{
public:
void f() {}
};
應該被選中。然而這會引發一個錯誤:
error: too few template parameters in template redeclaration
template <class V>
^~~~~~~~~~~~~~~~~~
note: previous template declaration is here
template <class V, class... >
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以我的假設是錯誤的。這實際上是如何工作的,對我的適應而言,正確的改變是什麼?
感謝,爲什麼''在'模板 C類'雖然要求? Afteral只有一個模板參數。 –
這是專業化語法,'C'是基本情況,'C'是單個模板參數的專用案例。 –
xinaiz