Bagaimana untuk Mendapatkan Nama Jenis dalam Templat C untuk Mesej Ralat Bermaklumat?

DDD
Lepaskan: 2024-11-16 15:18:03
asal
747 orang telah melayarinya

How to Retrieve Type Names in C   Templates for Informative Error Messages?

Dapatkan Nama Jenis dalam Templat C

Apabila membangunkan kelas templat untuk menghurai data, anda mungkin menghadapi keperluan untuk menjana mesej ralat bermaklumat sekiranya berlaku kegagalan penghuraian. Untuk memberikan mesej ralat yang komprehensif, anda mungkin perlu mengetahui nama jenis yang fungsi templat cuba tukar.

Coretan kod yang disediakan di bawah menggambarkan kod asal yang cuba mendapatkan semula nama jenis menggunakan pengkhususan untuk rentetan:

template<typename T> T GetValue(const std::wstring &amp;section, const std::wstring &amp;key)
{
    std::map<std::wstring, std::wstring>::iterator it = map[section].find(key);
    if(it == map[section].end())
        throw ItemDoesNotExist(file, section, key)
    else
    {
        try{return boost::lexical_cast<T>(it->second);}
        //needs to get the name from T somehow
        catch(...)throw ParseError(file, section, key, it->second, TypeName(T));
    }
}
Salin selepas log masuk

Penyelesaian alternatif melibatkan penggunaan:

typeid(T).name()
Salin selepas log masuk

The fungsi typeid(T) mengembalikan contoh std::type_info, yang menyediakan akses kepada nama jenis rosak T. Kaedah name() std::type_info mengembalikan nama jenis demangled.

Menyepadukan penyelesaian ini ke dalam kod anda, anda boleh mengubah suai blok tangkapan seperti berikut:

catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());
Salin selepas log masuk

Pendekatan ini menyediakan cara yang lebih fleksibel dan cekap untuk dapatkan semula nama jenis tanpa memerlukan pengkhususan yang jelas.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Jenis dalam Templat C untuk Mesej Ralat Bermaklumat?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan