0

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

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 而不能传递一个是没有意义的。

有没有什么我可以做的事情不涉及为每种方法类型专门设置一个丑陋的“中介类”来调用这个东西?

谢谢。

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

4

2 回答 2

3

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

give_void();
accept_void();

干净多了。

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

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

template <typename Result, typename Callable>
static Result func(Callable c)
{
    return c();
}
于 2012-07-30T12:11:45.403 回答
0

C++ 允许您return void从一个函数中获取(请参阅Is return void valid code?)。

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

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

于 2012-07-30T12:23:54.173 回答