Вызов другого конструктора при создании объекта с константными членами
У меня класс сconst
члены и один конструктор, который вызывает другой конструктор с заполненными дополнительными значениями. Обычно я мог бы использовать для этого инициализатор двоеточия, но функция сложная (printf
/sprintf
-подобно) и требует, чтобы я использовал переменную в стеке, поэтому я должен сделать это в теле конструктора и использовать assign*this
на новый объект. Но, конечно, это неверно, потому что мои переменные-членыconst
.
class A
{
public:
A(int b) : b(b), c(0), d(0) // required because const
{
int newC = 0;
int newD = 0;
myfunc(b, &newC, &newD);
*this = A(b, newC, newD); // invalid because members are const
// "cannot define the implicit default assignment operator for 'A', because non-static const member 'b' can't use default assignment operator"
// or, sometimes,
// "error: overload resolution selected implicitly-deleted copy assignment operator"
};
A(int b, int c, int d) : b(b), c(c), d(d) { };
const int b;
const int c;
const int d;
};
A a(0);
(Я явно не удалил оператор присваивания.) Я объявил члены const, потому что хотел бы, чтобы они были публичными, но не изменяемыми.
Есть ли какой-то канонический способ решения этой проблемы без использования страшных забросов и принудительного переопределения членов & apos;const
Несс? Какое здесь лучшее решение?