6

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

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作为函数参数传递?

4

1 回答 1

9

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

void* Callback;

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

void Function()
{
    (function<void()>)Callback();
}
于 2012-12-01T19:27:19.117 回答