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

时间:2012-11-29 23:55:11

标签: c++ c++11

即使明确提到函数指针中的参数是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);
}

任何人都可以解释如何进行转换吗?

2 个答案:

答案 0 :(得分:1)

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;

答案 1 :(得分:0)

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