Макро решение для дубликатов, констант и неконстант, получателей? - PullRequest
0 голосов
/ 11 августа 2011

Может ли это решение быть превращено в макрос, чтобы я вызывал что-то вроде:

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

Для функций, которые возвращают значение, и другое для функций, которые не,Мои навыки работы с токенами не так уж велики, поэтому я подумал, что кто-то здесь может придумать один (или сказать, что это невозможно).В конечном итоге цель состоит в том, чтобы избежать написания уродливого однострочного текста и заменить его чем-то легким для глаз и не подверженным ошибкам.

1 Ответ

0 голосов
/ 11 августа 2011

Если функция не возвращает значение (ссылку или указатель), вам нужны константные перегрузки в первую очередь? Кажется, единственная причина иметь два - это получить постоянную или неконстантную ссылку из класса. В противном случае одной только константной версии должно быть достаточно.

Что касается улучшения идиомы, как насчет того, чтобы несколько помощников по шаблонам вместо вас делали вывод типов:

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

Преимущество больше, если имена типов длиннее.

...