重复、常量和非常量、getter 的宏解决方案?
Posted
技术标签:
【中文标题】重复、常量和非常量、getter 的宏解决方案?【英文标题】:macro solution for duplicate, const and non-const, getters? 【发布时间】:2011-08-10 21:04:04 【问题描述】:可以将this solution 转换为宏,以便我调用类似以下内容的内容:
CALL_CONST_FUNC(objToReturn, thisPtr)->SomeConstFunc();
对于返回值的函数和不返回值的函数。我的宏观令牌技能不是那么好,所以我想也许这里有人可以想出一个(或者告诉我这是不可能的)。最终的目标是避免编写难看的单行代码,并用易于理解且不易出错的内容替换它。
【问题讨论】:
这看起来不漂亮吗?无论如何,您需要多少个 const 重载? 我宁愿让编写大量 getter 和 setter 变得更难。 @UncleBens:真的吗?它可能不漂亮,但绝对比另一个问题的解决方案中的漂亮。 【参考方案1】:如果一个函数不返回值(引用或指针),你首先需要 const 重载吗?似乎拥有两个的唯一原因是从类中获取 const 或非 const 引用。否则,仅 const 版本就足够了。
至于让习语更甜,不如换几个模板帮手帮你做类型推导:
template <class T>
const T& add_const(T& t) return t;
template <class T>
T& remove_const(const T& t) return const_cast<T&>(t);
class Foo
int foo;
public:
const int& get() const
//non-trivial work
return foo;
int& get()
return remove_const(add_const(*this).get());
;
类型名称越长,好处越大。
【讨论】:
If a function doesn't return a value (reference or pointer), do you need const overloads in the first place?
好点! ...我喜欢这个解决方案 (+1)
如果你的函数的 const 版本返回的东西应该是写保护的,你会通过拉这个技巧不小心使返回的东西写访问。以上是关于重复、常量和非常量、getter 的宏解决方案?的主要内容,如果未能解决你的问题,请参考以下文章