c++ - 将 'void' 作为函数参数传递

标签 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 作为参数传递。存在类型名称不正确的错误。

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

最佳答案

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

void* Callback;

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

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

关于c++ - 将 'void' 作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662821/

相关文章:

C++ 链接器错误

c - 如何编写一个函数来永久更改传递的字符串

c++ - 为什么编译器会尝试实例化一个我实际上并没有在任何地方实例化的模板?

c++ - 通过 shared_ptr 共享类内存

c++ - C++中的别名变量数组

c++ - 从 C++ 中的函数输出多个值

具有默认参数的函数的 C++ 偏序

visual-studio - Visual Studio 项目模板多个项目类型

C++:对象的引用计数器

Javascript:暂停/取消暂停 javascript 俄罗斯方 block 游戏