【发布时间】:2013-08-29 17:22:03
【问题描述】:
如何从模板仿函数包装器返回任意类型(void 或 non-void)?我将包装器用于前置条件和后置条件,因此我需要将返回的值存储在局部变量中,然后再从包装器返回它。但是当返回的类型是 void 时,编译器会给出错误,因为变量不能有 void 类型。在这里可以做什么?
template <typename Functor, typename... Args>
auto Decorate(Functor f, Args&&... args)
-> decltype(f(std::forward<Args>(args)...)) {
// preconditions
const auto result = f(std::forward<Args>(args)...);
// postconditions
return result;
}
【问题讨论】:
-
无效的前置/后置条件是什么?
-
我可以想到两个快速的解决方案:1)将前置条件和后置条件作为单独类的 ctor 和 dtor,然后
return f(...)(您可以从模板返回 void 作为例外规则),或 2)对返回 void 的可调用对象进行重载,但这意味着重复的代码。 -
我用它来测量一个函数的执行时间。
标签: c++ templates c++11 metaprogramming