Re: Проблема дублирования const- и non-cоnst - методов
От: swingus  
Дата: 17.04.16 17:44
Оценка: 76 (2)
Если возвращается что-то, что меняет свою константность вместе с константностью метода, то можно так:


class CA
{    
private:
    CM m_m;

    template<typename This>
    static decltype(auto) foo_impl(This *pThis)
    {
       return pThis->m_m;
    }
public:
    decltype(auto) foo() const { return foo_impl(this); }
    decltype(auto) foo() { return foo_impl(this); }

};


Здравствуйте, _hum_, Вы писали:
Проблема дублирования const- и non-cоnst - методов
От: _hum_ Беларусь  
Дата: 16.04.16 10:50
Оценка: +1
С выходом нового стандарта ситуация как-нибудь поменялась? А то пока наиболее простой и универсальный способ, который видел,
class CA
{    
    <...>
    //--------------------------------------
    const T* foo(const T* p)const { return foo_impl(p); }
    //--------------------------------------
    T*       foo(T* p)            { return foo_impl(p); }
    //--------------------------------------
    template<typename T_Qualified>
    static
    T_Qualified* foo_impl(T_Qualified* p)
    {
       <...>
    }
    //--------------------------------------
};


Но с ним возникают сложности, если зависимость типов, которые должны "менять квалификацию" в зависимости от квалификации метода, растет (например, если foo должна возвращать указатель на некий T1, а не на T).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.