在C++03中,如何判断给定参数是否是右值?我正在写一些非常通用的代码,如果可能的话,我需要一个引用,否则就需要构造一个新的对象。我是否可以重载以获取按值和按引用,并让右值返回调用按值函数?
或者我有一种非常恶心的感觉,这就是为什么右值引用在C++0x中?
编辑:
is_rvalue = !(is_reference || is_pointer)?
发布于 2010-06-12 03:27:33
显然,在C++03中有一种方法可以确定一个表达式是右值还是左值(我之所以这么说,显然是因为我不确定我对这项技术的理解有多好)。请注意,为了使该技术可用,预处理器宏是非常必要的。Eric Niebler写了一篇很好的文章,介绍了它是如何工作的,以及如何在BOOST_FOREACH中使用它:
请注意,这篇文章读起来很重(至少对我来说是这样);正如Neibler在其中所说的那样:
毫无疑问,这是晦涩难懂的东西,但我们得到了一种强大的方法来检测任何表达式的右值和左值。
使用本文中描述的右值检测至少可以帮助您处理C++0x的右值引用解决的一些问题。
发布于 2010-06-12 03:20:52
如何判断给定参数在C++03中是否为右值?
你不能。你所能做的就是相信你的客户和欺骗:
void call_me_with_anything(const T& const_ref)
{
/* read from const_ref */
}
void call_me_with_rvalue_only_please_i_trust_you(const T& const_ref)
{
T& ref = const_cast<T&>(const_ref);
/* write through ref */
}
我正在写一些非常通用的代码
那我担心C++03不会帮你剪了。
发布于 2010-06-12 03:19:34
,或者我有一种非常恶心的感觉,这就是为什么在C++0x中使用右值引用?
你是对的,你需要C++0x和rvalue引用来做这件事。
我能想到的最接近的事情是通过const-reference获取一些东西,因为它可以绑定到左值或右值(如果右值需要构造一个临时值,它就会)。也就是说,您的代码将无法区分这两者。
https://stackoverflow.com/questions/3025421
复制相似问题