将"void"作为函数参数传递

Pass 'void' as a function parameter

本文关键字:函数 参数传递 void      更新时间:2023-10-16

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

template <typename T>
void Function(T Parameter);

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

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

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

Function<int>(42);
// should result in...
(function<void(int))Callback(42);

但在某些情况下,我想void作为参数传递。

Function<void>(void);
// should result in...
(function<void(void)>Callback(void);

如您所见,我不需要提供任何内容或void作为参数。但我不能把void当作论据。存在一个错误,即类型名称不正确。

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

只需指定一个非模板重载:

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