Kaedah Templat Maya C
Dalam C , ia boleh mencabar untuk menggabungkan polimorfisme masa statik (templat) dengan polimorfisme masa jalan. Ini jelas dalam kelas abstrak berikut:
<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>
Kelas ini bertujuan untuk menetapkan dan mendapatkan semula data jenis tertentu berdasarkan pengecam unik. Walau bagaimanapun, masalah timbul apabila cuba memanggil fungsi setData generik dengan jenis tertentu, seperti setData
Bahasa melarang binaan ini kerana pengkompil perlu secara dinamik menghantar sejumlah tak terhingga kemungkinan instantiasi templat. Untuk menyelesaikan isu ini, beberapa pendekatan boleh dilakukan:
Mengalih keluar Polimorfisme Statik:
<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>
Mengalih Keluar Polimorfisme Dinamik:
<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>
Atas ialah kandungan terperinci Bagaimanakah anda boleh mencapai polimorfisme dengan kaedah templat maya dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!