gpt4 book ai didi

c++11: 模板参数中的 void

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:45 25 4
gpt4 key购买 nike

我正在用 C++ 实现一些东西,我遇到了一种情况,我不知道如何正确处理。考虑以下示例

template<typename F>
struct function_wrapper;

template<typename Return, typename... Input>
struct function_wrapper<Return(Input...)>
{
function_wrapper(/*...*/) = /* ... */
std::tuple<Input...> input_args;
Return return_value;

void first_calculate_result() { return_value = somehow_manipulate(input_args); }
Return operator()() { return return_value; }
}

现在,明显的用法是这样的

my_function<int(double)> stored_fnc(5.5);
stored_fnc.first_calculate_result();
/* something maybe else */
std::cout << "Result is: " << stored_fnc() << std::endl;

一切都按预期工作,只要function的返回类型不是 void .

我的问题是,我是否必须为 my_function<void(Input...)> 编写部分规范? ,我会省略所有 Return东西,还是有更简单的方法?此外,为什么 C++ 标准不允许我定义 void变量?

最佳答案

do I have to write partial specification for my_function<void(Input...)>...

正如所写,是的。您正在将调用的返回值保存在一个变量中,因此没有办法解决这个问题。但是,您可以那样简单地编写您的 function_wrapper,并拥有 operator()只需返回:

Return operator()() { return somehow_manipulate(input_args); }

即使Return,你也可以写这样的代码是voidsomehow_manipulatevoid功能。就是这样std::function<R(Args...)>实现。 void 没有特殊情况.

why C++ standard does not allow to define void variables?

因为 void不是一个值。 void函数不返回 void 类型的东西 ,它不会返回任何东西。这是独一无二的。它是空的。这是佛教的理想。你不能一无所有。

关于c++11: 模板参数中的 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com