Kaedah Templat Maya C: Menangani Templat dan Polimorfisme Masa Jalan
Dalam C , berhadapan dengan dilema menggabungkan pengkhususan templat dengan polimorfisme masa jalan, pembangun menemui batu penghalang. Kerumitan ini timbul apabila cuba melaksanakan kaedah maya dalam kelas abstrak yang menerima parameter templat. Cabarannya berpunca daripada banyaknya jenis berpotensi yang mewujudkan fungsi templat, sekali gus menghalang keupayaan pengkompil untuk menghantar panggilan secara dinamik.
Untuk mengatasi had ini, pelbagai pendekatan boleh dilakukan. Satu pilihan melibatkan mengalih keluar polimorfisme dinamik dan menggunakan jenis bukan terbitan untuk menyimpan pasangan nilai kunci. Templat kelas asas kemudiannya boleh digunakan untuk menyelesaikan pemetaan ini:
<code class="cpp">class AbstractComputation { public: template <typename T> void setData(const std::string& id, T value) { m_store.setData(id, value); } template <typename T> T getData(const std::string& id) const { return m_store.getData<T>(id); } protected: ValueStore m_store; };</code>
Sebagai alternatif, anda boleh mengekalkan polimorfisme masa jalan sambil menghapuskan parameter templat dengan menggunakan pemadaman jenis. Menggunakan boost::any, sebagai contoh, membolehkan penciptaan fungsi konkrit, bukan templat yang menerima hujah jenis dipadamkan:
<code class="cpp">class AbstractComputation { public: template <typename T> void setData(const std::string& id, T value) { setDataImpl(id, boost::any(value)); } template <typename T> T getData(const std::string& id) const { boost::any res = getDataImpl(id); return boost::any_cast<T>(res); } protected: virtual void setDataImpl(const std::string& id, const boost::any& value) = 0; virtual boost::any getDataImpl(const std::string& id) const = 0; };</code>
Taip pemadaman, pada asasnya, membolehkan rangsangan::any menyimpan data sebarang jenis di belakang tabir sambil mendayakan pengambilan data selamat jenis.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel anda: * Kaedah Templat Maya C: Bagaimana Mencapai Pengkhususan Templat dengan Polimorfisme Masa Jalan? * Templat C dan Masa Jalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!