0

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

谁能解释如何使它进行转换?

4

2 回答 2

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;
于 2012-11-30T00:03:42.900 回答
0

FillImage是模板,不是函数。尝试一些FillImage<float>.

于 2012-11-30T12:46:46.433 回答