当类型是指针时,模板类方法专门化失败

Jhappy77

我有一个称为Vector的模板类,我想根据类所采用的类型来专门化其方法之一my_compare。我能够成功地对大多数类型进行专门化,但是如果我使用a指针类型。

在cpp文件顶部:

template <typename T> class Vector {
public: 
...
  bool my_compare(const T a, const T b);
...
};

稍后的:

template <typename T> bool Vector<T>::my_compare(const T a, const T b){
  return (a < b);
}
template <> bool Vector<Mystring>::my_compare(const Mystring a, const Mystring b){
  //cout << "did a mycompare for stringies";
  return (strcmp(a.c_str(), b.c_str()) > 0);
}
template <> bool Vector<char*>::my_compare(const char* a, const char* b){
  return (strcmp(a, b) > 0);
}

该专业化适用于Mystring,但不适用于char *。我收到以下错误:

iterator.cpp:106:18: error: template-id ‘my_compare<>’ for ‘bool Vector<char*>::my_compare(const char*, const char*)’ does not match any template declaration
 template <> bool Vector<char*>::my_compare(const char* a, const char* b){
                  ^~~~~~~~~~~~~

当我使用不同的指针类型(例如int *或Mystring *)时,编译器会抛出相同的错误。我正在使用G ++作为编译器。任何人都知道我在做错什么以及如何解决?谢谢您的帮助!

亚历山大·孔德拉斯基(Alexander Kondratskiy)

这有些微妙,但这是因为const char*与并不相同char* const

您的函数my_compare(const T a, const T b)需要一个const TT在这种情况下是char*因此,您需要一个常量指针而不是指向常量的指针

添加预选赛的规则让你把constvolatile向左的类型,尽管大多数改性剂应用于从右到左。换句话说,您正在定义:

my_compare(char const* a, char const* b)

代替:

my_compare(char* const a, char* const b)

其他一些参考资料:

https://zh.wikipedia.org/wiki/Const_(计算机编程)

从左侧读取时,从右向左读取元素很重要。因此,anint const *成为指向const int的指针,而不是指向int的const指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

非模板类方法的条件模板专门化

来自分类Dev

在模板化类中专门化方法的正确方法

来自分类Dev

显式模板专门化不能具有存储类-成员方法专门化

来自分类Dev

返回类型对方法模板的专门化

来自分类Dev

返回类型对方法模板的专门化

来自分类Dev

模板类-成员函数专门化

来自分类Dev

模板类-成员函数专门化

来自分类Dev

您如何专门化非模板化类中没有参数的模板化方法?

来自分类Dev

在模板化类中专门化模板化结构

来自分类Dev

如何专门化具有指向成员参数的指针的模板类?

来自分类Dev

如何基于类型相关的类型专门化C ++模板类函数?

来自分类Dev

如何使用模板模板参数专门化类模板?

来自分类Dev

使用类模板的内部类模板专门化模板

来自分类Dev

您如何专门化非模板类中没有参数的模板方法?

来自分类Dev

如何部分专门化非模板类的模板成员方法?

来自分类Dev

模板构造器中的模板类专门化

来自分类Dev

模板构造器中的模板类专门化

来自分类Dev

使用模板模板参数专门化基类

来自分类Dev

C++ - 在具有非类型模板参数的模板化类上专门化函数模板

来自分类Dev

在类中使用成员类模板专门化

来自分类Dev

使用当前类专门化继承的模板化函数

来自分类Dev

函数指针类型和值的部分类专门化

来自分类Dev

为包含typedef的类型专门化模板

来自分类Dev

不使用<>隐式地专门化模板类

来自分类Dev

如何专门化模板类成员函数?

来自分类Dev

专门化模板派生类的成员函数

来自分类Dev

部分模板专门化,无需重写类

来自分类Dev

C ++-部分专门化模板类成员函数

来自分类Dev

类模板特殊成员函数显式专门化

Related 相关文章

热门标签

归档