Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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

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

Linda Hamilton
Linda Hamiltonasal
2024-10-27 06:47:29767semak imbas

Here are a few question-based titles that fit the content of your article:

* C   Virtual Template Methods: How to Achieve Template Specialization with Runtime Polymorphism?
* C   Template and Runtime Polymorphism: Can Virtual Template Methods Be Implemen

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn