加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:01:09 所属栏目:百科 来源:网络整理
导读:我有一个可变参数模板成员函数定义为: templatetypename ... Params VAlgorithm* CreateAlgorithm(const char *objectName,const char *className,Params ... par) 而且我想取专用版本的地址,其中Params不包含任何类型(我称之为“空”专业化),即: VAlgorit
我有一个可变参数模板成员函数定义为:

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读