外线可变参数模板功能

时间:2016-09-11 20:50:55

标签: c++ templates variadic-templates

我需要将声明与可变参数模板函数的定义分开:

struct A
{
    // In-line declaration of function
    template<typename...Args>
    A(Args&&...args);
};

// Out-of-line definition of function
template<typename...Args>
A<Args...>::A(Args&&...args)
{}

int main()
{
    A a("hello");
    return 0;
}

...这是我得到的错误(Clang 3.9 OS X 10):

main.cpp:8:2: error: expected unqualified-id
A<Args...>::A(Args&&...args)
 ^

我是否需要输入&#39; typename&#39;某处?提前感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

您写道:

template<typename...Args>
A<Args...>::A(Args&&...args)
{}

但是您的课程不是课程模板,所以以下是您的工作方式

template<typename...Args>
A::A(Args&&...args)
{}

即使它是 class-template ,下面的例子也是你如何处理 class-template 的模板化构造函数

template<typename... T>
struct A
{
    // In-line declaration of function
    template<typename...Args>
    A(Args&&...args);
};

// Out-of-line definition of function
template<typename... T>
template<typename... Args>
A<T...>::A(Args&&...args)
{}