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()期待どおりに機能します。

を取得するには、 std::remove_pointerconst ImageType*を使用できます

#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 に答える