我意识到这是一个可笑的问题,因为它需要不到 2 秒的时间来实现。但我依稀记得读过新标准引入了一个。
我 grep 了 VC10 的标头,但一无所获。你能帮我吗?烦死我了!:)
编辑:
再想一想,我记得的新仿函数可能是不相关的std::default_deleter
.
我意识到这是一个可笑的问题,因为它需要不到 2 秒的时间来实现。但我依稀记得读过新标准引入了一个。
我 grep 了 VC10 的标头,但一无所获。你能帮我吗?烦死我了!:)
编辑:
再想一想,我记得的新仿函数可能是不相关的std::default_deleter
.
你总是可以写一个无操作的 lambda:[]{}
在我期望函子不返回任何值的情况下,我将其用作插入式无操作。
struct VoidNoOp {
void operator()() const { }
template<class A>
void operator()(A a) const { (void)(a); }
template<class A, class B>
void operator()(A a, B b) const { (void)(a); (void)(b); }
template<class A, class B, class C>
void operator()(A a, B b, C c) const { (void)(a); (void)(b); (void)(c); }
};
这是任意数量参数的 C++11 变体:
struct VoidNoOp {
void operator()() const { };
template<typename P1, typename... Params>
void operator()(P1 p1, Params... parameters) {
(void)(p1); // we do this just to remove warnings -- requires the recursion
operator()(parameters...);
}
};
这个怎么样?
// Return a noop function
template <typename T>
struct noop
{
T return_val;
noop (T retval = T ())
: return_val (retval)
{
}
T
operator (...)
{
return return_val;
}
};
template <>
struct noop<void>
{
void
operator (...)
{
}
};
这应该适用于几乎任何用途。
您可能正在考虑身份函数(std::identity,显然它已在当前草案中删除),但这不是一回事。