如何实现fun中comp函数?

wunaizhuce123 2014-11-12 04:52:26
template <class Object, typename KeyType>
class Com
{
public:
void fun(KeyType temp){if(comp(a,temp)==true)....}
private:
Object a;
};


这个comp对于不同Object类型应该是不一样的。comp只要实现Object中某个成员与temp比较就行。
...全文
263 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-13
  • 打赏
  • 举报
回复
引用 10 楼 daiweifeng 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 老实说,模板我不熟。 我只会写qsort函数用到的compare函数。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。 在我眼里,模板技术比不上代码生成技术。
模板技术本质上就是一种代码生成技术 meta-programing是programing about programing 你这句话根本是问题,只是自己不擅长就说不值得 模板技术是在C++层次实现代码生成的一种技术,与软件工程那种不一样,只要将其限制在应用程序叫底层,用来做一些特殊用途,如构造同时拥有高性能高可重用性代码的库时候使用就可以了。 模板技术是一种以一当百的开发技术。[/quote] 我寄托帖主将模板的编译错误提示由晦涩难懂改进为简单易懂之后再学习使用模板技术;否则的话我还是继续使用编译错误提示简单易懂的代码生成技术。
Saleayas 2014-11-13
  • 打赏
  • 举报
回复
VS 到现在都不支持。g++ 好像可以。 看看 C2244 的最后一个。 无法使函数模板部分专用化。 所以你只能有两个选择, 1.定义一个特化的类。在定义这个函数。 2.不要使用类成员函数,直接使用函数重载。
超级能量泡泡 2014-11-13
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
老实说,模板我不熟。 我只会写qsort函数用到的compare函数。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。 在我眼里,模板技术比不上代码生成技术。
模板技术本质上就是一种代码生成技术 meta-programing是programing about programing 你这句话根本是问题,只是自己不擅长就说不值得 模板技术是在C++层次实现代码生成的一种技术,与软件工程那种不一样,只要将其限制在应用程序叫底层,用来做一些特殊用途,如构造同时拥有高性能高可重用性代码的库时候使用就可以了。 模板技术是一种以一当百的开发技术。
wunaizhuce123 2014-11-12
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
或者不定义通用的函数。
然后,对于你要使用的类型的 comp 函数,定义其特化函数。
赵4老师 2014-11-12
  • 打赏
  • 举报
回复
请允许我稍稍膜拜一下C++大神Saleayas
Saleayas 2014-11-12
  • 打赏
  • 举报
回复
或者不定义通用的函数。 然后,对于你要使用的类型的 comp 函数,定义其特化函数。
Saleayas 2014-11-12
  • 打赏
  • 举报
回复
你可以定义一个通用的模板 comp 函数。 然后,在认为需要和这个通用函数不一致的类型是,可以单独定义。 这叫做特化。
Saleayas 2014-11-12
  • 打赏
  • 举报
回复
template <class Object, typename KeyType> class Com { bool comp(Object a, KeyType temp); public: void fun(KeyType temp){if(comp(a,temp)==true)....} private: Object a; }; template< class KeyType > bool Com<int, KeyType >::comp(int a, KeyType temp) { return true; } template< class KeyType > bool Com<std::string, KeyType >::comp(std::string a, KeyType temp) { return true; } struct MyC { int a; } template< > bool Com<int, int >::comp(MyC a, int temp) { return a.a == temp; }
wunaizhuce123 2014-11-12
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
template <class Object, typename KeyType>
 class Com
 {
bool comp(Object a, KeyType temp);
 public:
 void fun(KeyType temp){if(comp(a,temp)==true)....}
 private:
 Object a;
 };

template< class KeyType >
bool Com<int, KeyType >::comp(int a, KeyType temp)
{
return true;
}
为什么定义的时候是Object,实现的时候确实int?这样可以的么?如果我还要实现String类型的比较,是不是要多加一个comp函数就可以了?
Saleayas 2014-11-12
  • 打赏
  • 举报
回复
template <class Object, typename KeyType>
 class Com
 {
bool comp(Object a, KeyType temp);
 public:
 void fun(KeyType temp){if(comp(a,temp)==true)....}
 private:
 Object a;
 };

template< class KeyType >
bool Com<int, KeyType >::comp(int a, KeyType temp)
{
return true;
}
赵4老师 2014-11-12
  • 打赏
  • 举报
回复
老实说,模板我不熟。 我只会写qsort函数用到的compare函数。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。 在我眼里,模板技术比不上代码生成技术。
wunaizhuce123 2014-11-12
  • 打赏
  • 举报
回复
我觉得这个comp函数应该不定义在类里面,就不知道该怎么写。

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧