2015-04-05 220 views
1

考虑以下几点:如何在类模板之外定义类模板的构造函数模板?

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> 
    ^~~~~~~~~~~~~~~~~~~~ 

我完全摸不着头脑。它有可能吗?

回答

5

您需要模板:一个为类,一个用于构造:

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