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

C++ 将返回void的函数传递给接受void的函数?,c++,C++,所以,在摆弄了一段时间后,我无法得到它。。。为什么这还不是标准的一部分 template<class T> accept_all(T) {} void give_void() {} int give_int() { return 1;} int main() { accept_all(give_void()); accept_all(give_int()); } 模板接受所有(T){ void赋予_void(){} int give_int(){return 1;} int ma

所以,在摆弄了一段时间后,我无法得到它。。。为什么这还不是标准的一部分

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

int main() {
accept_all(give_void());
accept_all(give_int());
}
模板接受所有(T){
void赋予_void(){}
int give_int(){return 1;}
int main(){
全部接受(放弃());
接受所有(给出int());
}
这将节省大量使用模板类专门化的麻烦。。。就一般语法而言,能够返回一个空而不能传递一个空是没有意义的

我能做些什么,不需要为每种方法类型专门化一个难看的“中介类”来调用它

谢谢

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

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

give_void();
accept_void();
更干净

实际上,通过键入
accept_void(give_void())什么也不保存即使您需要输入的符号数也是相同的

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

template <typename Result, typename Callable>
static Result func(Callable c)
{
    return c();
}
模板
静态结果函数(可调用c)
{
返回c();
}

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

give_void();
accept_void();
更干净

实际上,通过键入
accept_void(give_void())什么也不保存即使您需要输入的符号数也是相同的

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

template <typename Result, typename Callable>
static Result func(Callable c)
{
    return c();
}
模板
静态结果函数(可调用c)
{
返回c();
}

C++允许您从函数中返回void(请参阅)

然而,返还无效与接受无效存在显著差异;请注意,
int-foo(void)
只是
int-foo()
的一种替代(且已弃用)语法,并且仅出于与C兼容的历史原因而存在


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

C++允许您从函数返回void
(请参阅)

然而,返还无效与接受无效存在显著差异;请注意,
int-foo(void)
只是
int-foo()
的一种替代(且已弃用)语法,并且仅出于与C兼容的历史原因而存在


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

为什么要实现一个接受任何函数返回值的函数?问题在于
void
不是值,它根本不是值。如果查看
give\u void
,它没有返回任何内容。为什么要实现接受任何函数返回值的函数?问题是
void
不是值,它根本不是值。如果您查看
give\u void
,它不会返回任何内容。@user1240436:请参阅我的编辑please@user1240436:请参见我的编辑此标准令人困惑(一如既往)。我的生活会更简单,如果传递一个空白永远不会是一个“真实”的论点,而是一个表达虚拟的语法工具。在让代理模板类处理特殊情况和只启用void参数作为模板语法扩展的语言之间,我有点左右为难。我的生活会更简单,如果传递一个空白永远不会是一个“真实”的论点,而是一个表达虚拟的语法工具。在让代理模板类处理特殊情况和只启用void参数作为模板语法扩展的语言之间,我有点左右为难。