c – “空”可变参数模板特化的地址

c – “空”可变参数模板特化的地址,第1张

概述我有一个可变参数模板成员函数定义为: template<typename ... Params> VAlgorithm* CreateAlgorithm(const char *objectName, const char *className, Params ... par) 而且我想取专用版本的地址,其中Params不包含任何类型(我称之为“空”专业化),即: VAlgorithm* Cre 我有一个可变参数模板成员函数定义为:

template<typename ... Params> VAlgorithm* Createalgorithm(const char *objectname,const char *classname,Params ... par)

而且我想取专用版本的地址,其中Params不包含任何类型(我称之为“空”专业化),即:

VAlgorithm* Createalgorithm(const char *objectname,const char *classname)

我试过几种方式.天真的方式:

&AlgorithmFactory::Createalgorithm<>

(因为,例如,& AlgorithmFactory :: Createalgorithm< int>工作)和更明确的方式:

(VAlgorithm* (*)(const char*,const char*))AlgorithmFactory::Createalgorithm<>

GCC 4.7.1以明确的方式说:

error: insufficIEnt contextual information to determine type

似乎编译器不理解“空”特化,它将缺少的模板类型解释为缺少信息而不是“无类型”信息.这样做的正确方法是什么? (很抱歉这个潜在的天真问题,但我对可变参数模板很新,我没有找到关于这个主题的文档).
谢谢

解决方法 你的代码应该有效;见例如 http://liveworkspace.org/code/6253cf45f416be60879b93aa74c24de8

以下所有语法都适用于我:

struct S {  template<typename... Args> static int *foo(const char *,const char *,Args...);};int main() {    (int *(*)(const char *,const char *))S::foo<>;    (int *(*)(const char *,const char *))S::foo;    (int *(&)(const char *,const char *))S::foo<>;    (int *(&)(const char *,const char *))S::foo;    int *(&f)(const char *,const char *) = S::foo<>;    int *(&g)(const char *,const char *) = S::foo;    int *(*h)(const char *,const char *) = S::foo<>;    int *(*i)(const char *,const char *) = S::foo;}
总结

以上是内存溢出为你收集整理的c – “空”可变参数模板特化的地址全部内容,希望文章能够帮你解决c – “空”可变参数模板特化的地址所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存