有没有办法使用typedef作为模板函数的参数?或者将类型定义为参数的方法?
假设我想将一个函数指针传递给这个函数:
template<typename C, typename ...Args>
void test(typedef void (C::*functor)(Args... args) functor f)
{
f(args...);
}
答案 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.
}
或者,您可以将参数与参数一起传递,或者执行其他操作。我认为它只是一个概念验证,而真正的代码则是其他东西。