是否可以在模板化函数签名中使用typedef?

时间:2011-11-14 18:46:45

标签: c++ templates c++11 typedef

有没有办法使用typedef作为模板函数的参数?或者将类型定义为参数的方法?

假设我想将一个函数指针传递给这个函数:

template<typename C, typename ...Args>
void test(typedef void (C::*functor)(Args... args) functor f)
{
   f(args...);
}

2 个答案:

答案 0 :(得分:3)

不,你不能在参数中创建typedef。如果您的目标是避免在函数体中重复参数类型,则可以使用decltype

template<typename C, typename ...Args>
void test(void (C::*f)(Args...))
{
   typedef decltype(f) functor;
}

答案 1 :(得分:0)

没有

但是,当你写下这篇文章时,为什么还要这样:

template<typename C, typename ...Args>
void test(void (C::*f)(Args...), Args... args)
{
   C c;   //f is a member function, so need an instance of class
   (c.*f)(args...);  //call the function using the instance.
}

或者,您可以将参数与参数一起传递,或者执行其他操作。我认为它只是一个概念验证,而真正的代码则是其他东西。