我想更改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);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将参数const设为非,但是这不允许我为settings参数指定默认参数,或者使用temp变量调用该函数.
我想我可以struct在loadPixels函数中复制一下Settings ,但我想避免这种情况.还有其他想法吗?
编辑:
好吧,我决定使用mutable关键字.-这就是为什么:在我的场景中,Settings结构基本上只在构造纹理/加载像素时使用,之后不存储.-因此,mutable不会改变任何关于用户的常量,因为它根本无法访问.重载似乎是一种痛苦在我situtation,因为我实现多种类型(如无符号的字符,短整型,整型......),因此只是超载会增加源代码的量loadPixels方法很多.顺便说一句.在实际工作中设置得到保存一个内部PIMPL对象(其loadPixel功能没有模板,因此不知道类型的任何东西)这就是为什么我想直接在常量设置结构的工作.
您有两种选择:
const_cast <> ()mutable但是,因为你想更新const-y和非consty的东西,我想你想用非const版本重载函数:
template<>
void mySuperTexture::loadPixels<float>(uint32 _width, uint32 _height, float * _pixels, Settings & _settings)
Run Code Online (Sandbox Code Playgroud)
然后将公共代码放入另一个函数中.