将Void作为函数参数传递

时间:2012-12-01 19:17:48

标签: c++ function templates parameters void

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

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作为参数传递,有一个错误,即typename不正确。

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

1 个答案:

答案 0 :(得分:8)

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

void* Callback;

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

void Function()
{
    (function<void()>)Callback();
}