无法将带有 const 参数的函数转换为函数指针?

Can't convert a function with a const parameter to a function pointer?

本文关键字:函数 转换 指针 参数 const      更新时间:2023-10-16

即使明确提到函数指针中的参数是const,它似乎也无法将函数转换为此类型:

#include <iostream>
template <typename T>
class Image{};
template <typename TPixel>
static void
FillImage(const Image<TPixel>* const image){}
//FillImage(Image<TPixel>* const image){} // Replacing the above line with this one compiles fine
int main()
{
  typedef Image<float> ImageType;
  ImageType* image = new ImageType;
  void (*autoFunctionPointer)(const decltype(image)) = FillImage;
  autoFunctionPointer(image);
}

谁能解释一下如何让它进行转换?

const适用于指针。

因此,const decltype(image)等同于ImageType* const而不是const ImageType*

如果将image更改为

const ImageType* image = new ImageType;

FillImage()的第一个版本按预期工作。

要获得const ImageType*您可以使用 std::remove_pointer

#include <type_traits>
...
void (*autoFunctionPointer)(const std::remove_pointer<decltype(image)>::type *) = FillImage;

FillImage是一个模板,而不是一个函数。尝试一些FillImage<float>的变体。