【发布时间】:2012-07-06 12:03:37
【问题描述】:
我有一个管理灰度图像的类。我想用 libpng 保存它。为此,我想使用这样的const 成员函数:
void GrayscaleImage::SavePNG(std::string filename) const
{
// ...
png_bytep* row_pointers = new png_bytep[m_height];
for (int i = 0; i < height_; i++) {
row_pointers[i] = const_cast<png_bytep>(m_data.data()) + i * m_width * sizeof(uint8_t);
}
png_set_rows(png_ptr, info_ptr, row_pointers);
// ...
}
问题是png_set_rows 的第三个参数是非常量,所以如果我希望成员函数GrayscaleImage::SavePNG 是const,我必须在某些时候使用const_cast。我想知道,这样做安全吗?
【问题讨论】:
-
png_ptr和info_ptr是什么? -
@japreiss 它们是指向 libpng 使用的某些结构的不透明指针。