关于条件编译————在线等

iamnobody 2011-09-18 09:18:38
正在写一个矩阵的类模板
template<typename Type>
class matrix;


我想针对一些可以支持数学运算的类型写一些 op+=(),op-=(),op*=()...成员函数。注意是成员函数。
但是又由于有些类型是不支持这些操作的。

问题:

怎么区分开这些类型并给为他们实现不同板本呢?
对于内置类型可以一个一个特化。
对于自定义类型呢?
怎么判断它们是否支持 +,-,* 等操作呢?
为了保证matrix类的通用性,不允许要求要自定义类型内加上类似 iterator_category 之类的东西。


求解。。。
不解就求顶。。。
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndyZhang 2011-09-19
  • 打赏
  • 举报
回复
慢慢来,加油
赵4老师 2011-09-19
  • 打赏
  • 举报
回复
提醒:运算符重载是语法糖。
iblold 2011-09-19
  • 打赏
  • 举报
回复
如果输入参数类型不定,而且不同类型的操作不同,那只能多写几个适配函数来做
或者写一个适配函数,里面用typeid来做判断是什么类型的
如:

operator += (float a);
operator += (unsigned int a);

或者
template<typename T>
operator += (T v)
{
if (typeid(v) == typeid((float)1))
{}
else if (typeid(v) == typeid((unsigned int)1))
{}
}
  • 打赏
  • 举报
回复
mark
飞天御剑流 2011-09-18
  • 打赏
  • 举报
回复
我提供两种方法:

一、基类不提供这些运算符重载,需要的子类自行提供,这种方法会受到限制,可能不适用;
二、基类可以提供运算符重载,但改变子类继承成员的访问权限,这种方法比较灵活,推荐使用,例如:


class A
{
public :

A& operator + ( const int &a ){ return *this; }
};

class B : public A
{
private :

using A::operator+;
};

class C : public A
{

};



现在子类B的对象不能使用+,而子类C仍然可以使用。
healer_kx 2011-09-18
  • 打赏
  • 举报
回复
其实我没太看懂。。。给几个target代码看看。
守猪待屠 2011-09-18
  • 打赏
  • 举报
回复
建议百度,先学习条件编译吧。不要靠别人啊
zcm_xh2008 2011-09-18
  • 打赏
  • 举报
回复
学习,坐等大神解,顶一个,楼主散分时给点苦劳分吧。。。

64,654

社区成员

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

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