我有一个带有方法栏()的类foo。 我希望能够在对象上使用bar(),还可以使用bar()来创建对象的(修改过的)副本。 我将方法声明为:
void bar();
和
foo bar() const;
第二个选项适用于const foo对象,但非const foo对象上的错误: 无法将void转换为foo。
现在我可以通过以下方式解决这个问题:
foo obj2 = ((const foo&)obj1).bar();
我对一个更简洁的演员感兴趣,因为演员在(其他)案件中变得烦躁不安。解决方法是使用c附加const方法的名称,如:
foo barc() const.
我希望像(const)obj.bar()
这样的东西,但很明显,这是行不通的。
有什么想法吗?
编辑:
我用一个简单的宏解决了它。
#define _const(o) ((const decltype(o))o)
将其用作
_const(obj1).bar()
下划线似乎是可选的。
通过模板的另一个好/更好的方法,请参阅 answer to this question