Я хочу изменить член аргумента функции const
.представьте себе этот фрагмент из класса текстур, над которым я работаю:
template<>
void mySuperTexture::loadPixels<float>(uint32 _width, uint32 _height, float * _pixels, const Settings & _settings)
{
if (_settings.pixelDataType == PixelDataType::Auto) {
_settings.pixelDataType = PixelDataType::Float32;
// ^ obviously this does not work on the const variable
}
// ...
m_pimpl->loadPixels(_width, _height, _pixels, _settings);
}
Я знаю, что мог бы сделать аргумент не-const
, но это не позволило бы мне указать аргумент по умолчанию для аргумента настроекили вызовите функцию с переменной temp.
Я думаю, я мог бы сделать копию настроек struct
внутри функции loadPixels, но я бы хотел этого избежать.Любые другие идеи?
РЕДАКТИРОВАТЬ:
Хорошо, я решил пойти с изменяемым ключевым словом. Вот почему: в моем сценарии структура Настройки в основном используется тольково время построения текстуры / загрузки пикселей и не сохраняется впоследствии. - Таким образом, mutable
не меняет ничего о константности для пользователя, так как он просто недоступен.Кажется, перегрузка в моей ситуации более болезненна, поскольку я реализую метод loadPixels для различных типов (например, unsigned char, short, int ...), поэтому просто перегрузка увеличит объем исходного кода alot .Btw.настройки actall сохраняются внутри объекта pimpl (функция loadPixel которого не шаблонизирована и, следовательно, ничего не знает о типе), поэтому я хочу работать непосредственно над структурой const Settings.