gpt4 book ai didi

c++ - 静态成员初始化和可变参数模板

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:03 25 4
gpt4 key购买 nike

通过查看以下代码,我们注意到初始化名为 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 s,我不知道如何与他们合作。我什至不知道这是否可能,也不知道哪种语法是正确的。

如有任何帮助,我们将不胜感激。

最佳答案

只用

int Base<>::cnt = 42;

此时,Base<>是一个完全特化,你什么都不特化,所以 template<>不再需要了,实际上是被禁止的。

关于c++ - 静态成员初始化和可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com