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

时间:2012-07-30 12:10:06

标签: 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());
}

使用模板类专门化可以节省相当多的麻烦...而且就一般语法而言,能够返回空白而无法传递空白是没有意义的。

我能做些什么并不涉及专门研究一个丑陋的调解员班级&#39;为每个方法类型调用这个东西?

感谢。

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

2 个答案:

答案 0 :(得分:3)

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

give_void();
accept_void();

更清洁。

实际上,您输入accept_void(give_void());即可保存任何内容,即使您需要输入的符号数量相同。

编辑不确定我真的明白你想要实现的目标,但是:

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

答案 1 :(得分:0)

C ++允许您从函数return void开始(参见Is returning void valid code?)。

但是,返回空白与接受空白有很大不同;请注意int foo(void)只是int foo()的备用(并已弃用)语法,仅出于与C兼容的历史原因而存在。

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