【问题标题】:variadic struct specification可变结构规范
【发布时间】:2014-09-22 09:32:03
【问题描述】:

我这样定义一个可变参数结构

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;

Mutiple-arguments template, Mutiple-arguments template

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

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

导致编译错误。 我意识到我的问题很简单,但谷歌搜索没有帮助。 所以请不要向我扔烂番茄,谢谢你的回答。

【问题讨论】:

  • 你的可变参数模板在哪里?

标签: c++ variadic-templates


【解决方案1】:

单参数特化的语法是错误的。您可能正在为现场声明的class T 完全专门化它。你想要这个:

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

Live example

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多