我知道这个问题听起来很荒谬,因为这只需要不到2秒钟的时间即可实现。但是我模糊地记得新标准引入了一种。
我在VC10的头文件中使用grep却没有找到。你能帮忙吗?这让我困扰不已!:)
编辑:
仔细想想,我记得那个新的函数对象可能是无关的std::default_deleter
。
我知道这个问题听起来很荒谬,因为这只需要不到2秒钟的时间即可实现。但是我模糊地记得新标准引入了一种。
我在VC10的头文件中使用grep却没有找到。你能帮忙吗?这让我困扰不已!:)
编辑:
仔细想想,我记得那个新的函数对象可能是无关的std::default_deleter
。
您可以编写一个无操作的lambda表达式:[]{}
std::conditional
数量。而一个空的std::function
在operator()上会抛出异常。 - dean[]{}
都将成为一个不同的类型。我可以看到将无操作函数命名为单一名称的几个优点。 - Billy Donahuestruct 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); }
};
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...);
}
};
identity
,但因为它是一元的而将其忽略了。我记得六个月前需要一个通用的 default_deleter
,但不太记得是为了什么了。 - dean这个怎么样?
// 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 (...)
{
}
};
这应该适用于任何用途。