【发布时间】:2017-11-19 18:15:40
【问题描述】:
我想知道是否有指定模板的解决方案,以便可以传递void 或任何其他类型。
以下是一个非常简化的示例,如果 TReturn 也是 void 则返回 void,或者返回函数的返回值(也返回 TReturn,但不同之处在于那么它实际上是一个类型)。
template <typename TReturn>
TReturn Foo(std::function<TReturn()> function)
{
if(std::is_same<TReturn, void>::value)
{
// I am not sure what to put here
return function();
}
TReturn returnValue = function();
// Do some stuff with the returnValue here
return returnValue;
}
现在显然我做错了,因为一个函数不能返回两种不同的类型。这就是为什么我要问,有人知道这样做的方法吗?
非常感谢任何帮助
【问题讨论】:
-
这里的错误是您假设
TReturn是默认可构造的(void不是)。否则,我觉得没问题。 -
另一个错误是你试图生成'return void'而不是'return'
-
@ManishBaphna 是的,我知道这是错误的,这就是为什么我一直在寻找一种方法来使该声明适用于非
void类型并为void找到另一种方法 -
这看起来很奇怪——当
Foo被调用时,参数是一个返回类型为void的函数,你不想调用它,但不然呢?如果目标是始终调用传递的函数,您只需调用它:return function();。当返回类型为void时,这是允许的,对于这种确切的情况。 -
@PeteBecker 你是对的,我很抱歉。没有注意到,当然我想调用该函数,而不管传递给
Foo的类型如何。我将立即尝试您的解决方案。
标签: c++ templates return-value void