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

c – 可变结构规范

发布时间:2020-12-16 09:54:21 所属栏目:百科 来源:网络整理
导读:我像这样定义一个可变结构 template class T,class... TReststruct Opa{ Opa() { std::cout "Mutiple-arguments template"; }}; 并希望专门针对具有1个参数的情况进行专门化,如下所示 template struct Opaclass T{ Opa() { std::cout "One-argument template
我像这样定义一个可变结构

template <class T,class... TRest>
struct Opa
{
    Opa()
    {
        std::cout << "Mutiple-arguments template";
    }
};

并希望专门针对具有1个参数的情况进行专门化,如下所示

template <>
struct Opa<class T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};

但编译器只是忽略了第二个结构,而输出来自

Opa<int> opa;
Opa<int,int> opa_opa;

是多参数模板,多参数模板.

以不同方式指定单参数模板,例如

template <class T>
struct Opa
{...}

导致编译错误.
我意识到我的问题很简单,但谷歌搜索没有帮助.
所以请不要把腐烂的西红柿扔给我,谢谢你的回答.

解决方法

您的单参数特化的语法是错误的.你可能完全专注于现场宣布的T类.你想要这个:

template <class T>
struct Opa<T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};

Live example

通过在模板后的尖括号中列出部分特化的参数(在您的情况下,单个类型参数,类T),并在主模板名称后的尖括号中列出主模板的参数来声明部分特化(在您的情况下,T).

(编辑:李大同)

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

    推荐文章
      热点阅读