将函数指针定义为一个新类型,模板类型作为C++中不可能的参数?

Rya*_*yan 1 c++ pointers c++11

在C中,我可以做到这一点.

typdef void(TRAVERSAL_CALLBACK*)(int a);
Run Code Online (Sandbox Code Playgroud)

然后,这将允许我将函数指针作为参数传递给其他函数,该函数具有1个int类型的参数.

我一直在使用模板,目前,将函数指针传递给方法的方式如下:

void my_function(void(TRAVERSAL_CALLBACK*)(T &data));
Run Code Online (Sandbox Code Playgroud)

现在,如果我定义一个类型为T的参数的新类型,我是否可以尝试但是它无法编译.

typedef void(TRAVERSAL_CALLBACK*)(T &data);
Run Code Online (Sandbox Code Playgroud)

我正在使用C++ 11.这是我必须接受的不可能的东西,还是在C++ 11中有一种我不知道的这种方法呢?

Mat*_*lia 6

是的,在C++ 11中,由于"新",它是可能的using:

template<typename T>
using TRAVERSAL_CALLBACK = void(*)(T &data);
Run Code Online (Sandbox Code Playgroud)

但请注意,在C++中,您可能只需将回调的整个类型作为模板,以允许使用其他类型的可调用对象(仿函数,lambda,...).