C++: const constructor
Более формально: хочется в конструкторе отличить конструирование константного объекта от неконстантного.
Анахуа?
можно так:
static struct UseConstConstructorType {} UseConstConstructor;
class MyClass
{
public:
MyClass {...}
MyClass(const UseConstConstructorType&) {...} // const version
MyClass(int n) {...}
MyClass(int n, const UseConstConstructorType&) {...} // const version
};
// usage:
void main
{
MyClass x, y(5);
const MyClass cx(UseConstConstructor cy(5, UseConstConstructor);
}
Хочется, чтобы константный объект отличался от неконстантного по внутреннему представлению.
> можно так
Нет, так некруто. Ты ему сам рассказываешь, константный он или нет.
Нужна прозрачность.
Скажем так:
class A {
private:
bool is_const;
...
};
Нужно, чтобы на протяжении всего времени жизни объекта значение is_const соответствовало истине (const_cast не учитываем ).
То что ты хочешь - это все равно что перегрузить функцию по типу результата, что как известно невозможно
Оставить комментарий
ppplva
Субж не существует. Но очень хочется. А значит, его нужно придумать.Более формально: хочется в конструкторе отличить конструирование константного объекта от неконстантного.
По this не получается - внутри конструктора он non-const.
Любые методы, вызываемые из конструктора, вызываются в неконстантном варианте (если такой есть).
google рассказывает только про старую багу в gcc (он в определенных ситуациях ругался на отсутствие такого конструктора )
Есть идеи ?