C++ 重复、常量和非常量getter的宏解决方案?

C++ 重复、常量和非常量getter的宏解决方案?,c++,macros,const-correctness,C++,Macros,Const Correctness,可以转换为宏,这样我可以调用以下内容: CALL_CONST_FUNC(objToReturn, thisPtr)->SomeConstFunc(); 对于返回值的函数,另一个用于不返回值的函数。我的宏令牌技能不是很好,所以我想这里可能有人能想出一个或告诉我这是不可能的。最终的目标是避免编写难看的单行程序,并将其替换为直观且不易出错的程序。如果函数不返回值引用或指针,首先需要常量重载吗?似乎拥有两个的唯一原因是从类中获取常量或非常量引用。否则,仅const版本就足够了 至于让成语更甜美,

可以转换为宏,这样我可以调用以下内容:

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

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

如果函数不返回值引用或指针,首先需要常量重载吗?似乎拥有两个的唯一原因是从类中获取常量或非常量引用。否则,仅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());
    }
};

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

这看起来不漂亮吗?你到底需要多少常量重载?我宁愿让写很多getter和setter变得更难。@UncleBens:真的吗?它可能不漂亮,但肯定比另一个问题的解决方案更漂亮。如果函数不返回值引用或指针,那么首先需要const重载吗?好主意。。。我喜欢这个解决方案+1如果你的const版本的函数返回了一些应该是写保护的东西,你会意外地通过这个技巧使返回的任何东西都可以写访问。