采用C++类模板简化代码

dabing0617 2019-01-24 02:30:58
有若干个结构体,每个结构体里有若干个成员变量,例如
struct A{
double a1;
double a2;
A operator+(A a);
A operator-(A a);
A operator*(A a);
A operator/(A a);
};
struct B{
double b1;
double b2;
double b3;
B operator+(B b);
B operator-(B b);
B operator*(B b);
B operator/(B b);
};
struct C{
double c1;
double c2;
double c3;
double c4;
C operator+(C c);
C operator-(C c);
C operator*(C c);
C operator/(C c);
};

每个类的成员变量名有不同含义,不可以修改,每个结构体重载+-*/的操作符,那么每个结构内都得重载一遍,造成代码重复性,有没有办法简化?大神们
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabing0617 2019-01-24
  • 打赏
  • 举报
回复
找到方法了

#include "stdafx.h"

template<class T2> class S {
public:
	template<typename C> C operator+ (C& lhs)
	{
		C temp;
		int k = sizeof(T2);
		int n = sizeof(lhs) / k;
		for (int i = 0; i < n; i++)
		{
			T2 a = *(T2*)(int(this) + k*i);
			T2 b = *(T2*)(int(&lhs) + k*i);
			*(T2*)(int(&temp) + i*k) = a + b;
		}
		return temp;
	}
};

template<class T2> class A :public S<T2> {
	double a1 = 1;
	double a2 = 3;
};
template<class T2> struct B :public S<T2> {
	double b1 = 1;
	double b2=3;
	double b3=5;
};
template<class T2> struct C :public S<T2> {
	double c1=5;
	double c2=6;
	double c3=7;
	double c4=8;
};
int main()
{
	S<double> a1;
	S<double> b1;
	S<double> c1 = a1 + b1;

	A<double> a2;
	A<double> b2; 
	A<double> c2= a2 + b2;

	B<double> a3;
	B<double> b3;
	B<double> c3 = a3 + b3;

	C<double> a4;
	C<double> b4;
	C<double> c4 = a4 + b4;

    return 0;
}
cwenhe0324 2019-01-24
  • 打赏
  • 举报
回复
楼上说的是啊,你有相同逻辑的东西你才能提取公共的啊
WNs_ACE 2019-01-24
  • 打赏
  • 举报
回复
你这几个结构体定义的意义都不一样,每个结构体的重载+-*/的操作符的内部实现肯定也是不一样的,这样怎么可以重载呢?

64,648

社区成员

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

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