模板函数隐式/显式参数

发布于 2024-10-22 12:15:43 字数 605 浏览 2 评论 0原文

我正在尝试使用模板函数对像素值进行插值。

我有两类实现插值算法的插值器。

class LinearInterpolator;
class NearestNeighborInterpolator;

我有不同类别的图像;

class ColorImage;
class GrayScaleImage;

然后,我有一个函数可以利用您选择的特定插值器进行插值。

template<typename InterpType, typename ImageType, typename PelType> 
  bool getValue(const ImageType& image, PelPosition pos, PelType* pelValue);

在我的调用代码中

getValue<LinearInterpolator>(image, pos, pelValue);

,我收到编译器错误“缺少模板参数列表”。我的问题是:我想做的事情是完全不可行的,还是我在这里遗漏了一些东西。

I am trying to use template function to do interpolation for pixel values.

I have two classes of interpolators that implements the interpolation algorithm.

class LinearInterpolator;
class NearestNeighborInterpolator;

I have different classes of images;

class ColorImage;
class GrayScaleImage;

I then have a function that does interpolation utilizing the specific interpolator you pick.

template<typename InterpType, typename ImageType, typename PelType> 
  bool getValue(const ImageType& image, PelPosition pos, PelType* pelValue);

In my calling code I have

getValue<LinearInterpolator>(image, pos, pelValue);

And I get the compiler error "missing template argument list". My question is: is what I am trying to do completely infeasible or am I missing something here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里泪两行 2024-10-29 12:15:43

好的。 LinearInterpolator 的完整类声明实际上看起来像这样...

template <
  typename ImageType, 
  typename OutputPixelType = typename ImageType::Pixel, 
  typename FieldType = double, 
  template<typename From, typename To, typename Enable = void> class OutputPixelConverter = StaticCast
>
class LinearInterpolator : public AbstractInterpolator;

所以我最终从类型参数列表中取出 InterpType 并传入一个枚举作为参数...

旧>>>>

template<typename InterpType, typename ImageType, typename PelType> 
  bool getValue(const ImageType& image, PelPosition pos, PelType* pelValue);

新>>>>

template<typename ImageType, typename PelType> 
  bool getValue(InterpType interp, const ImageType& image, PelPosition pos, PelType* pelValue);

如果有更好的方法,欢迎评论。

All right. The full class declaration for LinearInterpolator actually looks like this...

template <
  typename ImageType, 
  typename OutputPixelType = typename ImageType::Pixel, 
  typename FieldType = double, 
  template<typename From, typename To, typename Enable = void> class OutputPixelConverter = StaticCast
>
class LinearInterpolator : public AbstractInterpolator;

So I ended up taking the InterpType out of the type parameter list and passing in an enum as the parameter...

Old >>>>>

template<typename InterpType, typename ImageType, typename PelType> 
  bool getValue(const ImageType& image, PelPosition pos, PelType* pelValue);

New >>>>>

template<typename ImageType, typename PelType> 
  bool getValue(InterpType interp, const ImageType& image, PelPosition pos, PelType* pelValue);

If there is a better way of doing it, please comment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文