【发布时间】:2013-03-14 16:56:48
【问题描述】:
我想要
template <class T>
void foo(T &t);
也能够接受临时对象,而不会影响通过引用接受其他对象并在它们上调用非常量方法。在 C++03 中可能吗?
我意识到我可能会强制用户将其对象的所有方法声明为 const,并将所有成员声明为 mutable,然后使用 const T &t 引用,但这是一个丑陋的解决方法。
【问题讨论】:
-
假设
foo会尝试修改这些临时文件是否正确?为什么? -
不知何故,您的主题(带有“按值”的部分)不符合您的问题描述的其余部分......
-
在 C++11 中,这是通用引用的用途......但这不是 C++03 中存在的功能
-
你为什么要这个?正如大卫所提到的,C++11 必须对语言进行重大修改以支持这种情况(单个模板函数接受右值和左值并可以区分它们),所以如果你想模拟它,你将有更好的机会通过陈述您的要求得到答案。否则,您实际上是在要求在 C++03 中模拟右值引用,这是不可能的。
标签: c++ templates pass-by-reference c++03