2017-10-10 5 views
0

내가 이렇게 보이는 클래스가 이런 종류의 일을 처리 할 수 ​​있습니다.스토어 값 및 클래스의 특정 범위의 값은

  1. 저장 세트 유형의 양, 완전히 유형을
  2. 을 만드는 방법으로 개체를 저장해야 (내가 캐스팅 할 수있는 무언가가 충분) 유지 :

    Physical_component는 수에 있어야한다 그들로부터 전달 된 것들로부터 개인 (따라서 orignial 클래스의 변화로부터 안전하다)

나는 열거 형과 함께 c를 excisting하지만 나는 그 이름을 모른다. 또한 C++에는 아마도 더 좋은 방법이있을 것입니다.

Storage_component이 가정된다 :

  1. 스토어 모든 종류의
  2. (옵션) 내가 제대로 이것을 달성하는 방법을 몰라 원래 유형

을 기억한다. 나는 std :: any를 보았다. 그러나 그것은 오히려 새로운 것처럼 보인다. 그러므로 나는 이것에 대해 갈 좋은 방법인지 모른다. 또한 나는 벡터에 저장할 수 없기 때문에 storage_component를 템플릿으로 만들 수 없다.

이러한 클래스를 구현하는 적절한 방법은 무엇입니까?

+1

컴파일러와 라이브러리가 C++ 17 ([std :: any'] (http://en.cppreference.com/w/cpp/utility/any)가 도입 된 최신 버전이 아닌 경우) 그런 다음 [Boost any] (http://www.boost.org/doc/libs/1_65_1/doc/html/any.html)? 또는 아마도 ['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) (또는 그 [Boost equivalent] (http://www.boost.org/doc/libs) /1_65_1/doc/html/variant.html)). 또는 요구 사항 분석을 확인하고 디자인에 그런 유형 삭제가 필요하지 않은지 확인하십시오. 아마도 그것은 다른 방법으로 해결 될 수 있습니까? –

+0

@Someprogrammerdude 사람들이 왜 boost :: btw를 사용합니까? 나는 그것을 어디에서나 볼 수 있습니까? 그것은 단지 모든 std :: functions을 포함하고 있기 때문인가요, 실제로는 더 좋고/빠릅니까? 여기서 무슨 일이 일어나고있는거야? 네, 감사합니다. 표준의 외부 리소스를 발견 : : 잘 작동하는 것 같습니다.나 do not가 아프다고 생각한다. – MoustacheSpy

+1

현재 표준 라이브러리에있는 기능 중 일부 또는 표준 라이브러리의 향후 버전에서 제공 될 기능 중 일부는 Boost 라이브러리에서 시작되었다. 예를 들어 부스트. 'std :: any'를 위해 충분히 새로운 컴파일러를 가지고 있지 않다면, Boost any가 적당한 대체물이다. [Boost] (http://www.boost.org/)는 단일 라이브러리가 아니며 많은 라이브러리의 * 콜렉션 *입니다. 어떤 것은 표준 라이브러리 (또는 다른 방법으로)에서 동작을 복제하지만, 많은 * * * 더 많은 것을 가지고 있습니다. –

답변

0

스토어 유형의 집합 금액, 완전히 당신은 아마 std::variant<Ts...>(또는 boost::variant<Ts...>)를 원하는 유형

을 유지. 특정 시점에서Ts... 중 하나 인 중 하나를 저장합니다.


스토어 모든 종류의

모든 유형이 동일한 인터페이스를 공유하는 경우, 기존의 virtual + std::unique_ptr 다형성 접근 방식을 사용합니다. 그렇지 않으면 std::any이 올바른 선택입니다.

+0

대단히 감사합니다! 스토리지 ID를 위해 어떤 유형 (int, char 등을 포함)을 사용하는 것을 좋아합니다. 그래서 그들은 같은 인터페이스를 사용하지 않을 것입니다. std :: any가 자동으로 전달 된 클래스의 복사본을 만들거나 수동으로 수행해야하는 작업입니까? 나는 std :: variant에 대해 같은 질문을 가지고있다. – MoustacheSpy

+0

'std :: variant'와'std :: any'는 모두 값 의미 유형이다. 그들은 현재 활성화 된 타입을 복사 할 것이다. –

+0

@MoustacheSpy : 답변에 대한 링크를 추가하여 자세한 정보를 확인하십시오. –