[C++] 템플릿 클래스 값의 C ++ std :: map


Answers

  1. 거기에 오류가 있습니다 : 당신은 Field의 멤버를 "가치있게"해야합니다 (하나는 "type"이어야합니다).
  2. 원시 포인터를지도의 값으로 유지하지 마십시오. boost :: shared_ptr을 사용하십시오.
  3. 또한 아마도 이미 사용할 수있는 DB / 테이블 처리 코드가 많이있는 클래스를 작성해야 할 충분한 이유가 있어야합니다. 적용 가능하다면, 기존의 것을 사용하고 자신의 테이블 처리 코드를 작성하지 않는 것을 고려하십시오.

자, 질문에 대답 :), 필드 <> 클래스는 모든 데이터 형식에 의해 공유되는 공통 기본 클래스에서 상속받을 수 있습니다. 이렇게하면 열 맵과 같은 컨테이너에서 템플릿 클래스로 인스턴스화 된 파생 객체에 대한 포인터 ( 공유 포인터 만들기)를 유지할 수 있습니다.

Question

나는 RowColumn 클래스를 선언하려고 시도하고 있는데, Row 는 private std::map 가지고 있으며, templateized Column 가리키는 값을 가지고있다. 이 같은:

template <typename T>
class DataType {
  private:
    T type;
};
template <typename T>
class Field {
  private:
    T value;
    DataType<T> value;
};
class Row {
  private:
    std::map<unsigned long,Field*> column;
}; 

글쎄, 원칙적으로 Row 클래스는 어떤 종류의 Field (또는 Column )를 사용할지를 알아야한다. 즉, Column 1의 Field<int> 또는 Column 2의 Field<double> .하지만 Row::column 선언에 대한 올바른 구문이 무엇인지, std::map 이 이러한 의미에서 제한되어 있고 다른 것을 사용해야하는 경우 확실하지 않습니다.

나는 당신에게 제안을 appretiate하고 그들에게 미리 감사드립니다.