如何在c++中处理具有不同类型的多个数据成员的类
How to handle class with multiple data members of different type in c++?
假设我有一个类,它有许多不同类型的数据成员,并且可能在未来的中添加更多
Class A
{
public:
int getA();
void setA(int a);
...
private:
int m_a;
int m_b;
double m_c;
string m_d;
CustomerType m_e;
char * m_f;
...
}
问题是:每次添加另一个数据成员时,都需要添加get/set函数。出于某种原因,我不能把它们公开。
一种解决方案是将getType/setType函数与template:一起使用
Class A
{
public:
int getInt(int id){
switch(id)
case ID_A:
return m_a;
case ID_B:
return m_b;
...
}
void setInt(int id,int i){...}
double getDouble(){...}
void setDouble(int id,double d){...}
...
template<T>
T get();
template<> //specialize
double get<double>(){return getDouble();}
...
private:
}
有更好的解决方案吗?谢谢
这里有一个对我有用的策略。
#include <string>
struct CustomerType {};
class A
{
public:
template <typename T> struct member
{
typedef T type;
type data;
};
struct type_A : member<int> {};
struct type_B : member<int> {};
struct type_C : member<double> {};
struct type_D : member<std::string> {};
struct type_E : member<CustomerType> {};
struct type_F : member<char*> {};
template <typename T>
typename T::type get()
{
return ((T&)allData).data;
}
template <typename T>
void set(typename T::type d)
{
((T&)allData).data = d;
}
private:
struct AllData : type_A,
type_B,
type_C,
type_D,
type_E,
type_F {};
AllData allData;
};
int main()
{
A a;
a.set<A::type_A>(20);
int b = a.get<A::type_A>();
return 0;
}
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 是否可以根据其数据成员的类型确定类型的大小
- 拒绝包含某些公共静态数据成员的类型
- 复制构造抽象类型的数据成员
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 具有引用数据成员的结构不是文本类型吗?
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 标记为 [数据成员] 时的意外类型'USN'
- 依赖于依赖类型的非静态数据成员的非限定名称
- 基类数据成员类型取决于派生类
- 类型为专用数据成员的静态成员
- QString:包括非文本类型的静态数据成员的初始化
- 由于标准而指向 Base 数据成员的指针类型
- sizeof参考对于类型和数据成员的不同
- 对齐说明符:在类型 / 上 成员数据
- 参考类型静态数据成员的问题可能是编译器错误
- 指向不完整类型的数据成员
- C++静态匿名类类型数据成员