c – 可变参数模板成员函数的部分特化
发布时间:2020-12-16 05:31:34 所属栏目:百科 来源:网络整理
导读:当使用可变参数模板进行模板化时,我正在努力使用成员函数的特化. 以下示例专门研究整个类,它工作正常: templatetypename... Argsclass C;templateclass T,typename... Argsclass CT,Args... { };templateclass C { };int main() { Cint,double c{};} 下面的
当使用可变参数模板进行模板化时,我正在努力使用成员函数的特化.
以下示例专门研究整个类,它工作正常: template<typename... Args> class C; template<class T,typename... Args> class C<T,Args...> { }; template<> class C<> { }; int main() { C<int,double> c{}; } 下面的内容没有,即使它背后的想法与上面的想法完全相同: class F { template<typename... Args> void f(); }; template<class T,typename... Args> void F::f<T,Args...>() { } int main() { } 我收到以下错误,我不明白它是由于: main.cpp:7:23: error: non-type partial specialization ‘f<T,Args ...>’ is not allowed void F::f<T,Args...>() { } ^ main.cpp:7:6: error: prototype for ‘void F::f()’ does not match any in class ‘F’ void F::f<T,Args...>() { } ^ main.cpp:3:10: error: candidate is: template<class ... Args> void F::f() void f(); ^ 在专门化功能模板时是否有一些我不知道的限制? G版本是:g(Debian 5.2.1-23)5.2.1 20151028 编辑 顺便说一句,我从实际代码中得到的实际问题是: non-class,non-variable partial specialization ‘executeCommand<T,Args ...>’ is not allowed 无论如何,简化的例子类似于真实的例子.我希望这些错误并非完全不相关. 解决方法
您不能部分专门化功能模板;只允许显式专门化.
使用重载可以获得几乎相同的效果,尤其是在使用诸如tag dispatching之类的概念时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |