0

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

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

对于返回值的函数和不返回值的函数。我的宏观令牌技能不是那么好,所以我想也许这里有人可以想出一个(或者告诉我这是不可能的)。最终的目标是避免编写难看的单行代码,并用易于理解且不易出错的内容取而代之。

4

1 回答 1

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());
    }
};

如果类型名称更长,则好处更大。

于 2011-08-10T22:26:59.460 回答