X不是类模板

时间:2018-01-19 08:07:57

标签: c++ templates

我正在尝试编译以下代码,我收到错误

  

"错误:'MD5Sum'不是班级模板
  模板<> struct MD5Sum< :: cv_bridge :: CvImage>"

template<> struct MD5Sum<::cv_bridge::CvImage>
{
  static const char* value() { return MD5Sum<::sensor_msgs::msg::Image>::value(); }
  static const char* value(const ::cv_bridge::CvImage&) { return value(); }

  static const uint64_t static_value1 = MD5Sum<::sensor_msgs::msg::Image>::static_value1;
  static const uint64_t static_value2 = MD5Sum<::sensor_msgs::msg::Image>::static_value2;

  // If the definition of sensor_msgs/Image changes, we'll get a compile error here.
  ROS_STATIC_ASSERT(MD5Sum<::sensor_msgs::msg::Image>::static_value1 == 0x060021388200f6f0ULL);
  ROS_STATIC_ASSERT(MD5Sum<::sensor_msgs::msg::Image>::static_value2 == 0xf447d0fcd9c64743ULL);
};

这似乎是模板专业化。这是否意味着模板类应该先出现在模板专门化之前。

1 个答案:

答案 0 :(得分:4)

类模板MD5Sum需要在其任何特化之前声明。 您需要包含声明模板的文件,或者自己声明。

您可以使用空定义(如果您只想调用完全专用的版本)或您选择的通用实现:

// add this before your specialization
template <class T> struct MD5Sum; // empty definition

// or your default implementation
template <class T> struct MD5Sum {
   ...
};