我想知道是否有解决方案来指定一个模板,以便可以传递void
或任何其他类型。 以下是一个非常简单的例子,如果TReturn
也是void
,它应该不做任何事情,只返回void
,或者返回函数的返回值(它也返回TReturn
,但有区别,它实际上是一个类型) 。C++ void或任何类型作为模板参数
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'不是)。否则,这对我来说似乎没问题。 – davidhigh
另一个错误是,你试图产生'返回空'而不是'返回' –
@ManishBaphna是的,我知道它的错误,这就是为什么我正在寻找一种方式,使非空''类型的声明是真实的并找到另一个'空' –