我正在尝试开发某种类型的开发模式,以便以通用方式向类添加方法。几乎就像为类及其属性添加(行为)属性一样。
我希望添加方法,使用类 的内部数据,而不依赖于使用的变量名称 。
这样做的一种可能方法是从其他类扩展类,如下例所示:
template <class Self,class Type>
class AcessOperator {
const Type* data;
public:
AcessOperator(const Type * data) : data(data){}
Type & operator [](int index){
return data[index];
}
};
class Vector1 : public AcessOperator<Vector1,int>{
int * any;
public:
Vector1() : AcessOperator<Vector1,int>(any),any(0){
any = (int*)malloc(sizeof(int)*10);
}
virtual ~Vector1(){ free(any); }
};
我会为Vector1设置运算符[。]。
另一种达成目标的方法是使用宏:
#define access(class_type, pointer_name, index, return_type)\
return_type & operator[](int index){ \
return pointer_name[index];\
}
class Vector2 {
int * any;
public:
Vector2() : any(0){
any = (int*)malloc(sizeof(int)*10);
}
access(Vector2,any,index,int)
virtual ~Vector2(){ free(any); }
};
我不喜欢宏,所以我更喜欢第一种方式。然而,这种方法导致数据方面的开销。我使用以下代码打印了每个班级的大小:
int main(){
cout << sizeof(Vector1) << endl;
cout << sizeof(Vector2) << endl;
return 0;
}
这是输出:
sizeof(Vector1): 24
sizeof(Vector2): 16
这是预期的(我的机器是64位)
Vector1:2个指针+ vtable指针= 2 * 8 +8 = 24
Vector1:1指针+ vtable指针= 8 + 8 = 16
现在问题是:
如果没有使类更胖和而不使用宏,是否有可能实现这一目标?