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 함수를 사용하는 것입니다.

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:

}

더 나은 해결책이 있습니까? 감사.

R 사후

저에게 맞는 전략이 있습니다.

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

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Objective-C의 다른 클래스에서 데이터를로드하는 방법은 무엇입니까?

분류에서Dev

최신 C ++에서 다른 클래스 유형의 객체를 하나의 컨테이너에 저장하는 방법은 무엇입니까?

분류에서Dev

클래스 내에서 다른 여러 사용자 입력을 사용하여 사전에 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

멤버 friend 함수를 클래스의 다른 멤버를 사용하지 않고 포인터를 사용하여 개인 데이터 멤버 클래스에 액세스 할 수있는 이유는 무엇입니까?

분류에서Dev

파이썬의 다른 클래스에 정의 된 값을 사용하여 데이터를 전면으로 다시 전송하여 클래스 (db.Model 유형)를 정의하는 방법은 무엇입니까?

분류에서Dev

고유 ID에 다른 열에 대한 값이 다른 여러 행이있는 범주 형 데이터를 집계하는 방법은 무엇입니까?

분류에서Dev

JDBC : 다른 데이터베이스의 WHERE 절에서 IS NULL을 처리하는 방법은 무엇입니까?

분류에서Dev

다른 클래스의 Tkinter 목록 상자에 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

문자열 데이터 멤버가있는 클래스의 개체를 C ++의 다른 클래스에 전달하는 방법

분류에서Dev

C ++에서 여러 클래스 유형에 대해 동일한 템플릿 멤버 함수를 지정하는 방법은 무엇입니까?

분류에서Dev

iOS의 한 클래스에서 다른 클래스로 NSobject 클래스 데이터를 전달하는 방법은 무엇입니까?

분류에서Dev

Java, Lambda : 다양한 유형의 여러 목록이있는 클래스에서 목록을 선택하는 방법은 무엇입니까?

분류에서Dev

Java에서 클래스의 멤버 메서드를 사용하여 파일에서 데이터를 읽는 방법은 무엇입니까?

분류에서Dev

데이터 프레임의 다른 열을 사용하여 하나의 플롯에 여러 그래프를 그리는 방법은 무엇입니까?

분류에서Dev

__init__의 유형과 다른 데이터 클래스의 필드 유형에 주석을다는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 .Java 파일에서 클래스를 처리하는 방법은 무엇입니까?

분류에서Dev

C # 드라이버를 사용하여 MongoDB의 다른 데이터베이스로 문서를 이동하는 방법은 무엇입니까?

분류에서Dev

데이터 유형을 유지하면서 여러 timedate 데이터를 데이터 프레임의 하위 집합에 넣는 방법은 무엇입니까?

분류에서Dev

다른 클래스 내부에 클래스가있을 때 데이터 리더에서 데이터를 가져 오는 방법은 무엇입니까?

분류에서Dev

Postgres 용 C #에서 테이블 필드의 데이터베이스 데이터 유형을 얻는 가장 빠르고 빠른 방법은 무엇입니까?

분류에서Dev

C ++에서 가장 좋은 방법으로 클래스 멤버 벡터의 요소를 반복하는 방법은 무엇입니까?

분류에서Dev

다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

분류에서Dev

서로 다른 하위 클래스에 대해 여러 인터페이스 인스턴스를 구현하는 방법은 무엇입니까?

분류에서Dev

다른 클래스의 멤버에 연결된 유형의 멤버를 선언하는 방법은 무엇입니까?

분류에서Dev

다른 데이터 유형에 대해 C에서 메모리를 할당하는 적절한 방법은 무엇입니까?

분류에서Dev

C ++에서 개체의 다른 데이터 멤버를 반복하는 방법이 있습니까?

분류에서Dev

클래스 내의 여러 메서드에 바이어스를 설정하는 방법은 무엇입니까?

분류에서Dev

C #에서 다른 데이터 유형을 반환하는 방법은 무엇입니까?

분류에서Dev

SQL Server에서 한 테이블의 여러 행에서 다른 테이블로 데이터를 복사하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Objective-C의 다른 클래스에서 데이터를로드하는 방법은 무엇입니까?

  2. 2

    최신 C ++에서 다른 클래스 유형의 객체를 하나의 컨테이너에 저장하는 방법은 무엇입니까?

  3. 3

    클래스 내에서 다른 여러 사용자 입력을 사용하여 사전에 데이터를 추가하는 방법은 무엇입니까?

  4. 4

    멤버 friend 함수를 클래스의 다른 멤버를 사용하지 않고 포인터를 사용하여 개인 데이터 멤버 클래스에 액세스 할 수있는 이유는 무엇입니까?

  5. 5

    파이썬의 다른 클래스에 정의 된 값을 사용하여 데이터를 전면으로 다시 전송하여 클래스 (db.Model 유형)를 정의하는 방법은 무엇입니까?

  6. 6

    고유 ID에 다른 열에 대한 값이 다른 여러 행이있는 범주 형 데이터를 집계하는 방법은 무엇입니까?

  7. 7

    JDBC : 다른 데이터베이스의 WHERE 절에서 IS NULL을 처리하는 방법은 무엇입니까?

  8. 8

    다른 클래스의 Tkinter 목록 상자에 데이터를 추가하는 방법은 무엇입니까?

  9. 9

    문자열 데이터 멤버가있는 클래스의 개체를 C ++의 다른 클래스에 전달하는 방법

  10. 10

    C ++에서 여러 클래스 유형에 대해 동일한 템플릿 멤버 함수를 지정하는 방법은 무엇입니까?

  11. 11

    iOS의 한 클래스에서 다른 클래스로 NSobject 클래스 데이터를 전달하는 방법은 무엇입니까?

  12. 12

    Java, Lambda : 다양한 유형의 여러 목록이있는 클래스에서 목록을 선택하는 방법은 무엇입니까?

  13. 13

    Java에서 클래스의 멤버 메서드를 사용하여 파일에서 데이터를 읽는 방법은 무엇입니까?

  14. 14

    데이터 프레임의 다른 열을 사용하여 하나의 플롯에 여러 그래프를 그리는 방법은 무엇입니까?

  15. 15

    __init__의 유형과 다른 데이터 클래스의 필드 유형에 주석을다는 방법은 무엇입니까?

  16. 16

    두 개의 다른 .Java 파일에서 클래스를 처리하는 방법은 무엇입니까?

  17. 17

    C # 드라이버를 사용하여 MongoDB의 다른 데이터베이스로 문서를 이동하는 방법은 무엇입니까?

  18. 18

    데이터 유형을 유지하면서 여러 timedate 데이터를 데이터 프레임의 하위 집합에 넣는 방법은 무엇입니까?

  19. 19

    다른 클래스 내부에 클래스가있을 때 데이터 리더에서 데이터를 가져 오는 방법은 무엇입니까?

  20. 20

    Postgres 용 C #에서 테이블 필드의 데이터베이스 데이터 유형을 얻는 가장 빠르고 빠른 방법은 무엇입니까?

  21. 21

    C ++에서 가장 좋은 방법으로 클래스 멤버 벡터의 요소를 반복하는 방법은 무엇입니까?

  22. 22

    다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

  23. 23

    서로 다른 하위 클래스에 대해 여러 인터페이스 인스턴스를 구현하는 방법은 무엇입니까?

  24. 24

    다른 클래스의 멤버에 연결된 유형의 멤버를 선언하는 방법은 무엇입니까?

  25. 25

    다른 데이터 유형에 대해 C에서 메모리를 할당하는 적절한 방법은 무엇입니까?

  26. 26

    C ++에서 개체의 다른 데이터 멤버를 반복하는 방법이 있습니까?

  27. 27

    클래스 내의 여러 메서드에 바이어스를 설정하는 방법은 무엇입니까?

  28. 28

    C #에서 다른 데이터 유형을 반환하는 방법은 무엇입니까?

  29. 29

    SQL Server에서 한 테이블의 여러 행에서 다른 테이블로 데이터를 복사하는 방법은 무엇입니까?

뜨겁다태그

보관