首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板推演失败

模板推演失败
EN

Stack Overflow用户
提问于 2012-07-28 03:28:26
回答 1查看 162关注 0票数 1

有没有人能解释一下为什么这个不起作用:

代码语言:javascript
复制
#include "itkCovariantVector.h"
#include "itkImage.h"

template <typename TComponent, int NumberOfComponents>
void FillImage(itk::Image<itk::CovariantVector<TComponent,
NumberOfComponents>, 2>* const image,
               itk::Image<itk::CovariantVector<TComponent,
NumberOfComponents>, 2>* const output)
{
  std::cout << "Works." << std::endl;
}

int main(int, char* [] )
{
  typedef itk::Image<itk::CovariantVector<float, 3u>, 2u> ImageType;

  ImageType::Pointer imageSmartPointer = ImageType::New();
  ImageType* image = imageSmartPointer.GetPointer();
  FillImage(image, image);
  return 0;
}
/*
no matching function for call to ‘FillImage(ImageType*&, ImageType*&)’
note: candidate is:
template<class TComponent, int NumberOfComponents> void
FillImage(itk::Image<itk::CovariantVector<TComponent,
NumberOfComponents>, 2u>*, itk::Image<itk::CovariantVector<TComponent,
NumberOfComponents>, 2u>*)
*/

这些类模板的定义是:http://www.itk.org/Doxygen/html/classitk_1_1CovariantVector.html http://www.itk.org/Doxygen/html/classitk_1_1Image.html

我用非ITK类创建了同样的情况,并且它可以正常工作:

代码语言:javascript
复制
#include <iostream>

template <typename TPixel, int Dimensions>
struct Image
{
};

template <typename TComponent, int NumberOfComponents>
struct Vector
{
};

template <typename TComponent, int NumberOfComponents>
void FillImage(Image<Vector<TComponent, NumberOfComponents>, 2 >* const image,
               Image<Vector<TComponent, NumberOfComponents>, 2 >* const output)
{
  std::cout << "Works." << std::endl;
}

int main(int, char* [] )
{
  typedef Image<Vector<float, 3>, 2 > ImageType;

  ImageType* image = new ImageType;
  FillImage(image, image);
  delete image;
  return 0;
}

有没有人能解释一下可能的区别?

EN

回答 1

Stack Overflow用户

发布于 2012-08-01 04:44:04

问题是我必须将签名从<int NumberOfComponents>更改为<unsigned int NumberOfComponents>,这样它才能与ITK类的定义相匹配。

代码语言:javascript
复制
#include <iostream>

template <typename TPixel, int Dimensions>
struct Image
{
};

// The deduction works with this
// template <typename TComponent, int NumberOfComponents>
// struct Vector
// {
// };

// The deduction does NOT work with this (unsigned int vs int above)
template <typename TComponent, unsigned int NumberOfComponents>
struct Vector
{
};

template <typename TComponent, int NumberOfComponents>
void FillImage(Image<Vector<TComponent, NumberOfComponents>, 2 >* const image,
               Image<Vector<TComponent, NumberOfComponents>, 2 >* const output)
{
  std::cout << "Works." << std::endl;
}

int main(int, char* [] )
{
  typedef Image<Vector<float, 3>, 2 > ImageType;

  ImageType* image = new ImageType;
  FillImage(image, image);
  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11694461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档