> 백엔드 개발 > C++ > 본문

C에서 가상 템플릿 메소드를 구현하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-26 09:18:30
원래의
432명이 탐색했습니다.

How to Implement Virtual Template Methods in C  ?

C 가상 템플릿 메서드

제시된 시나리오에는 동적으로 설정하고 검색하기 위한 가상 템플릿 메서드인 setData 및 getData가 포함된 추상 클래스가 포함됩니다. 제공된 식별자를 기반으로 다양한 유형의 데이터. 그러나 질문에서 알 수 있듯이 이러한 구성은 C에서 직접 지원되지 않습니다.

이 제한을 해결하기 위해 두 가지 기본 접근 방식이 있습니다:

정적 다형성 제거

한 가지 옵션은 정적 다형성(템플릿)을 제거하고 중간 저장 메커니즘을 도입하는 것입니다. AbstractComputation 클래스는 식별자를 기반으로 데이터를 저장하고 검색하는 템플릿이 아닌 ValueStore를 정의할 수 있습니다.

<code class="cpp">class ValueStore {
public:
  template <typename T>
  void setData(std::string const &id, T value) {...}
  
  template <typename T>
  T getData(std::string const &id) {...}
};

class AbstractComputation {
public:
  template <typename T>
  void setData(std::string const &id, T value) {
    m_store.setData(id, value);
  }
  
  template <typename T>
  T getData(std::string const &id) const {
    return m_store.getData<T>(id);
  }

private:
  ValueStore m_store;
};</code>
로그인 후 복사

그러면 파생 클래스는 런타임 다형성 없이도 ValueStore에 직접 액세스할 수 있습니다.

런타임 다형성 제거

또는 정적 다형성을 제거하면서 런타임 다형성을 유지할 수도 있습니다. 여기에는 기본 클래스에서 유형 삭제를 수행하는 작업이 포함됩니다.

<code class="cpp">class AbstractComputation {
public:
  template <typename T>
  void setData(std::string const &id, T value) {
    setDataImpl(id, boost::any(value));
  }
  
  template <typename T>
  T getData(std::string const &id) const {
    boost::any res = getDataImpl(id);
    return boost::any_cast<T>(res);
  }

protected:
  virtual void setDataImpl(std::string const &id, boost::any const &value) = 0;
  virtual boost::any getDataImpl(std::string const &id) const = 0;
};</code>
로그인 후 복사

boost::any는 모든 유형의 값을 저장할 수 있고 데이터를 안전하게 검색할 수 있는 유형입니다. 유형 삭제는 파생 클래스에서 구현되어야 하는 가상 메소드에 대한 인수로 Boost::any 객체를 전달하여 수행됩니다.

위 내용은 C에서 가상 템플릿 메소드를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!