C 가상 템플릿 방법
C에서는 정적 시간 다형성(템플릿)과 런타임 다형성을 결합하는 것이 어려울 수 있습니다. 이는 다음 추상 클래스에서 분명하게 드러납니다.
<code class="cpp">class AbstractComputation { public: template <class T> virtual void setData(std::string id, T data); template <class T> virtual T getData(std::string id); };</code>
이 클래스는 고유 식별자를 기반으로 지정된 유형의 데이터를 설정하고 검색하는 것을 목표로 합니다. 그러나 setData
컴파일러가 동적으로 처리해야 하기 때문에 언어는 이 구성을 금지합니다. 무한한 수의 템플릿 인스턴스화를 전달합니다. 이 문제를 해결하려면 다음과 같은 몇 가지 접근 방식이 가능합니다.
정적 다형성 제거:
<code class="cpp">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 ); } protected: ValueStore m_store; };</code>
동적 다형성 제거:
<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>
위 내용은 C에서 가상 템플릿 메소드를 사용하여 어떻게 다형성을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!