如何在类模板之外定义类模板的构造函数模板?

时间:2015-04-05 14:57:49

标签: c++ templates syntax

请考虑以下事项:

template<typename R>
struct call {
    template<typename F, typename... Args>
    explicit call(F&& f, Args&&... args);

    R result;
};

template<typename R, typename F, typename... Args>
call<R>::call(F&& f, Args&&... args)
: result(std::forward<F>(f)(std::forward<Args>(args)...)) { }
克朗对我大吼:

utility.tpp:40:1: error: too many template parameters in template redeclaration
template<typename R, typename F, typename... Args>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
utility.hpp:36:5: note: previous template declaration is here
    template<typename R>
    ^~~~~~~~~~~~~~~~~~~~

我绝对感到困惑。它有可能吗?

1 个答案:

答案 0 :(得分:5)

您需要两个模板:一个用于类,一个用于构造函数:

template <typename R>                   // <== for call<R>
template <typename F, typename... Args> // <== for call(F&&, Args&&...)
call<R>::call(F&& f, Args&&... args)