复制,const和非const,getters的宏解决方案?

时间:2011-08-10 21:04:04

标签: c++ macros const-correctness

可以将this solution变成一个宏,以便我按照以下方式调用:

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

对于返回值的函数和另一个不返回值的函数。我的宏令牌技能不是那么好所以我想也许这里有人可以想出一个(或者告诉我这是不可能的)。最终的目标是避免编写丑陋的单行内容,并将其替换为易于使用且不容易出错的内容。

1 个答案:

答案 0 :(得分:0)

如果函数没有返回值(引用或指针),那么首先需要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());
    }
};

如果类型名称更长,则收益更大。