静态成员初始化和可变参数模板
Static member initialization and variadic template
通过查看以下代码,我们注意到初始化名为 cnt
:
的静态数据成员非常容易
template<typename T> struct Base { static int cnt; };
template<typename T> int Base<T>::cnt = 0;
int main() { }
无论如何,我正在努力处理 variadic_template
和静态数据成员,因为我无法使用它们。考虑以下代码:
template<typename...> struct Base;
template<> struct Base<> { static int cnt; };
int main() { }
首先,我尝试了最明显的东西,至少是对我来说最明显的那个:
template<typename... T> int Base<T...>::cnt = 0;
它返回了 error: template definition of non-template ‘int Base<T>::cnt’
,我立即意识到我的尝试确实没有意义。也就是说,在那之后我有点困惑,因为对我来说哪个是正确的语法不再明显。
我尝试了以下几种:
template<> int Base<>::cnt = 0;
// ... and ...
template<> int Base::cnt = 0;
错误 error: template definition of non-template ‘unsigned int Base<T>::cnt’
和 error: ‘template<class ... T> struct Base’ used without template parameters
。
到目前为止,我已经与 variadic template
合作过一些,但我不知道如何与他们合作。我什至不知道它是否可能,也不知道正确的语法是什么。
如有任何帮助,我们将不胜感激。
只使用
int Base<>::cnt = 42;
在这一点上,Base<>
是一个完全专精,你什么都不专精,所以template<>
不再是必需的,实际上是被禁止的。
初始化为:
int Base<>::cnt = 0;
通过查看以下代码,我们注意到初始化名为 cnt
:
template<typename T> struct Base { static int cnt; };
template<typename T> int Base<T>::cnt = 0;
int main() { }
无论如何,我正在努力处理 variadic_template
和静态数据成员,因为我无法使用它们。考虑以下代码:
template<typename...> struct Base;
template<> struct Base<> { static int cnt; };
int main() { }
首先,我尝试了最明显的东西,至少是对我来说最明显的那个:
template<typename... T> int Base<T...>::cnt = 0;
它返回了 error: template definition of non-template ‘int Base<T>::cnt’
,我立即意识到我的尝试确实没有意义。也就是说,在那之后我有点困惑,因为对我来说哪个是正确的语法不再明显。
我尝试了以下几种:
template<> int Base<>::cnt = 0;
// ... and ...
template<> int Base::cnt = 0;
错误 error: template definition of non-template ‘unsigned int Base<T>::cnt’
和 error: ‘template<class ... T> struct Base’ used without template parameters
。
到目前为止,我已经与 variadic template
合作过一些,但我不知道如何与他们合作。我什至不知道它是否可能,也不知道正确的语法是什么。
如有任何帮助,我们将不胜感激。
只使用
int Base<>::cnt = 42;
在这一点上,Base<>
是一个完全专精,你什么都不专精,所以template<>
不再是必需的,实际上是被禁止的。
初始化为:
int Base<>::cnt = 0;