宏解决方案的重复,const和非const, getter

macro solution for duplicate, const and non-const, getters?

本文关键字:const getter 和非 解决方案      更新时间:2023-10-16

是否可以将此解决方案转换为宏,以便我调用以下内容:

CALL_CONST_FUNC(objToReturn, thisPtr)->SomeConstFunc();

用于返回值的函数,

用于不返回值的函数。我的宏令牌技能不是很好,所以我想也许这里有人可以想出一个(或者告诉我这是不可能的)。最终的目标是避免编写难看的一行代码,并将其替换为易于观看且不易出错的代码。

如果一个函数不返回值(引用或指针),你首先需要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());
    }
};
如果类型名称较长,则好处更大。