Bagaimana untuk Mendapatkan Nama Jenis dalam Templat C untuk Pelaporan Ralat Parse?

Linda Hamilton
Lepaskan: 2024-11-16 10:30:03
asal
443 orang telah melayarinya

How to Obtain Type Names in C   Templates for Parse Error Reporting?

Cara Mendapatkan Nama Jenis dalam Templat C untuk Pelaporan Ralat Parse

Apabila menghadapi ralat semasa menghuraikan fail data teks, adalah penting untuk menyediakan mesej bermaklumat kepada bukan pengaturcara, menyatakan isu dan lokasi fail data tempat ralat berlaku. Walaupun mengekstrak fail, bahagian dan nama kunci adalah mudah, mendapatkan jenis data yang fungsi templat dihuraikan tidak serta-merta.

Untuk menangani keperluan ini, dua pendekatan boleh dipertimbangkan:

Pengenalpastian Jenis Masa Jalan dengan typeid

tangkap(...)buang ParseError(fail, bahagian, kunci, it->second, typeid(T).name());

Pendekatan ini menggunakan operator typeid untuk mendapatkan semula nama jenis semasa masa jalan. Walau bagaimanapun, ia mungkin dikenakan overhed masa jalan jika pengecualian dilemparkan, yang tidak diingini untuk kod yang dilaksanakan dengan kerap.

Makros Nama Jenis Kompilasi-Masa

Pendekatan alternatif melibatkan penentuan makro nama jenis dalam fail pengepala yang berasingan:

#pragma once
template<typename T> const wchar_t *GetTypeName();

#define DEFINE_TYPE_NAME(type, name) \
    template<>const wchar_t *GetTypeName<type>(){return name;}
Salin selepas log masuk

Makro ini boleh digunakan untuk menentukan nama jenis untuk semua jenis yang dikehendaki dalam fail pengepala masing-masing. Pemaut akan secara automatik menyelesaikan pengkhususan templat yang sesuai berdasarkan jenis yang ditentukan, atau membuang ralat jika jenis yang diperlukan tiada.

Pendekatan masa kompilasi ini menghapuskan sebarang overhed masa jalan dan memastikan semua nama jenis yang diperlukan ditakrifkan pada masa penyusunan. Ia juga membolehkan penambahan jenis baharu dengan mudah pada masa hadapan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Jenis dalam Templat C untuk Pelaporan Ralat Parse?. 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