我意识到这是一个可笑的问题,需要不到2秒的时间才能实现。但我隐约记得,阅读新标准的介绍。C++(0x)中是否存在no-op“do nothing”函数对象?
我grep'ed VC10的标题,并没有提出什么。你能帮我吗?它在扰乱我! :)
编辑: 关于第二个想法,在新的算符,我记得大概是无关std::default_deleter
。
我意识到这是一个可笑的问题,需要不到2秒的时间才能实现。但我隐约记得,阅读新标准的介绍。C++(0x)中是否存在no-op“do nothing”函数对象?
我grep'ed VC10的标题,并没有提出什么。你能帮我吗?它在扰乱我! :)
编辑: 关于第二个想法,在新的算符,我记得大概是无关std::default_deleter
。
你可能是想确定身份的功能(标准::身份,显然它在目前的草案中删除)是不是一回事,虽然。
我曾经认识过“身份”,但因为是一个单身而被解雇。我记得在六个月前需要一个通用的default_deleter来完成某件事......不能完全记住。 – dean 2010-06-06 20:52:09
这个怎么样?
// 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 (...)
{
}
};
这应该适用于任何用途。
请注意,如果您曾尝试将非平凡可复制类型作为参数传递给noop,则会失败,因为它们不适用于... – rerx 2014-09-09 15:07:06
我使用这个作为插入式无操作的情况下,我期望函数不返回任何值。
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...);
}
};
什么的AIRMILES点浪费。想象一下,如果这不是一个CW问题,你可以节省多少钱! – wilhelmtell 2010-06-06 00:17:45