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
Lepaskan: 2024-10-27 06:47:29
asal
765 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!