将Void作为函数参数传递

dan*_*jar 5 c++ parameters templates function void

我有一个函数应该接受任何类型的参数.因此我使用模板.

template <typename T>
void Function(T Parameter);
Run Code Online (Sandbox Code Playgroud)

该函数的作用是调用函数.在我的实际应用程序中,有一个带字符串键的回调映射,但这与此问题无关.回调必须是函数指针,返回类型为void,但任何参数类型.

void* Callback;

template <typename T>
void Function(T Parameter)
{
    (function<void(T))Callback(Parameter);
}
Run Code Online (Sandbox Code Playgroud)

假设回调是正确的类型,这应该像下面这样工作.

Function<int>(42);

// should result in...
(function<void(int))Callback(42);
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,我想传递void参数.

Function<void>(void);

// should result in...
(function<void(void)>Callback(void);
Run Code Online (Sandbox Code Playgroud)

如您所见,我需要提供任何内容或void作为参数.但我不能void作为参数传递,有一个错误,类型名称将是不正确的.

我如何void作为函数参数传递?

Ada*_*ras 8

为什么不指定非模板重载?

void* Callback;

template <typename T>
void Function(T Parameter)
{
    (function<void(T)>)Callback(Parameter);
}

void Function()
{
    (function<void()>)Callback();
}
Run Code Online (Sandbox Code Playgroud)