gpt4 book ai didi

c++ - 如何在 C++ 中处理具有多个不同类型数据成员的类?

转载 作者:行者123 更新时间:2023-11-28 06:40:13 25 4
gpt4 key购买 nike

假设我有一个类有许多不同类型的数据成员,并且可能在未来添加更多

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 函数与模板一起使用:

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;
}

关于c++ - 如何在 C++ 中处理具有多个不同类型数据成员的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com