这是对于这个问题的跟进:通用函数对象,适用于任意参数列表的函数
我有一个函数对象类(完整代码请参见上面的链接):
template<typename... ARGS>
class Foo
{
std::function<void(ARGS...)> m_f;
public:
Foo(std::function<void(ARGS...)> f) : m_f(f) {}
void operator()(ARGS... args) const { m_f(args...); }
};
在
operator()
中,我可以通过一个递归的“剥离”函数轻松访问args...
,如Stroustrup的C++11 FAQ所述。我的问题是:我想在构造函数中访问f的参数类型,即
ARGS...
。显然,我不能访问值,因为目前还没有值,但参数类型列表某种程度上被隐藏在f
中,不是吗?
ARG...
时,你需要使用typename
和template
关键字来消除歧义。所以,你需要写成typename function_traits<fun_vararg>::template arg<0>::type
,而不是function_traits<fun_vararg>::arg<0>::type
。看看现在是否可以了:http://ideone.com/bysFS - Nawaz