gpt4 book ai didi

c++ - 有没有办法更改 const 结构的成员?

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:26 25 4
gpt4 key购买 nike

我想更改 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 ,但这不允许我为设置参数指定默认参数,或使用临时变量调用函数。

我想我可以在 loadPixels 函数中复制 Settings struct,但我想避免这种情况。还有其他想法吗?

编辑:

好吧,我决定使用可变关键字。- 这就是为什么:在我的场景中,设置结构基本上仅在构建纹理/加载像素期间使用,之后不存储。- 因此 mutable 确实不会改变用户的常量,因为它根本无法访问。在我的情况下,重载似乎更让人痛苦,因为我正在为各种类型(即 unsigned char、short、int ...)实现 loadPixels 方法,因此只是重载会增加源代码的数量很多 .顺便提一句。实际设置保存在 pimpl 对象中(其 loadPixel 函数未模板化,因此对类型一无所知)这就是为什么我想直接在 const Settings 结构上工作。

最佳答案

你有两个选择:

  1. 做一个const_cast <> ()
  2. 将成员标记为 mutable

但是,因为你想更新 const-y 和非 const 的东西,我猜你想用非 const 版本重载函数:

template<>
void mySuperTexture::loadPixels<float>(uint32 _width, uint32 _height, float * _pixels, Settings & _settings)

然后将公共(public)代码放到另一个函数中。

关于c++ - 有没有办法更改 const 结构的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com