将返回void的函数传递给接受void的函数

Pass a function returning void to a function accepting void?

本文关键字:void 函数 返回      更新时间:2023-10-16

所以,在折腾了一段时间之后,我无法获得它……为什么这还不是标准的一部分?

template<class T> accept_all(T) {}
void give_void() {}
int give_int() { return 1;}
int main() {
accept_all(give_void());
accept_all(give_int());
}

这将节省使用模板类专业化的相当多的麻烦。。。就一般语法而言,能够返回void而不能传递void没有什么意义。

我能做些什么,而不需要为每种方法类型专门化一个丑陋的"中介类"来调用这个东西吗?

谢谢。

编辑:那么,实现一个接受任何函数返回值的模板的好方法是什么呢?

我觉得它看起来真的很奇怪。为什么不连续调用这些函数:

give_void();
accept_void();

干净多了。

实际上,即使需要输入的符号数量相同,输入accept_void(give_void());也不会节省任何费用。

编辑不确定我是否真的理解你想要实现的目标,但是:

template <typename Result, typename Callable>
static Result func(Callable c)
{
    return c();
}

C++允许您从函数中return void(请参阅返回无效代码吗?)。

然而,返回无效与接受无效有着显著的不同;请注意,int foo(void)只是int foo()的一种替代语法(已弃用),并且仅由于与C.兼容的历史原因而存在

你的建议打破了函数调用中参数数量与函数接受的参数数量相同的不变。