即使明确提到函数指针中的参数是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);
}
任何人都可以解释如何进行转换吗?
答案 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>
的一些变体。