Menggunakan pengecualian dan pengaturcaraan generik boleh meningkatkan kebolehgunaan semula kod fungsi C++. Pengendalian pengecualian digunakan untuk melaporkan ralat, dan pengaturcaraan generik membolehkan fungsi dan kelas beroperasi dalam cara bebas jenis data. Sebagai contoh, fungsi read_file() boleh membaca data fail dan membuang pengecualian std::file_not_found jika fail itu tidak wujud. Fungsi validate_input() generik mengesahkan julat input dan membuang pengecualian std::range_error jika ia tidak sah. Dalam pertempuran sebenar, fungsi read_data() generik menggunakan pengendalian pengecualian untuk membaca data daripada fail Jika fail tidak ditemui, pengecualian std::file_not_found akan dilemparkan.
Pengenalan
Pengendalian pengecualian ialah mekanisme berkuasa dalam C++ untuk menangani ralat dan situasi luar biasa. Menggabungkan ini dengan pengaturcaraan generik boleh meningkatkan kebolehgunaan semula dan kebolehpercayaan kod anda dengan ketara. Artikel ini meneroka cara mereka bentuk fungsi teguh dan berskala dengan menggunakan pengecualian dan pengaturcaraan generik.
Asas pengendalian pengecualian
Pengecualian ialah objek yang dilemparkan semasa masa jalan untuk memberitahu fungsi situasi yang tidak dijangka. C++ mentakrifkan kelas std::exception
sebagai kelas asas untuk semua kelas pengecualian lain. Untuk membuang pengecualian, gunakan kata kunci lempar
diikuti dengan objek pengecualian. Untuk mengendalikan pengecualian, anda boleh menggunakan blok try-catch
. std::exception
类作为所有其他异常类的基类。要抛出异常,可以使用 throw
关键字,后面跟着异常对象。要处理异常,可以使用 try-catch
块。
使用异常进行错误处理
异常在错误处理中非常有用。通过抛出有关错误的异常,函数可以向调用者传递错误条件而不中断程序流程。例如,考虑一个 read_file()
函数,该函数试图打开文件并从中读取数据。如果文件不存在或无法打开,函数可以抛出一个 std::file_not_found
异常。
void read_file(const std::string& filename) { std::ifstream file(filename); if (!file.is_open()) { throw std::file_not_found("File not found: " + filename); } // ... }
泛型编程基础
泛型编程是使用类型参数编写代码的技术。这允许函数和类以与数据类型无关的方式工作。C++ 使用模板来实现泛型编程。例如,一个 max()
函数可以比较任何类型的两个值并返回最大值。
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
将异常和泛型编程相结合
异常处理和泛型编程可以很好地结合在一起,以创建健壮的可重用函数。泛型函数可以处理不同类型的数据,而异常则允许函数在遇到错误时优雅地失败。
例如,考虑一个 validate_input()
函数,该函数验证用户输入是否在特定范围内。该函数可以泛型化以处理任何类型的数据,并且在输入无效时抛出异常。
template <typename T> void validate_input(T input, T min, T max) { if (input < min || input > max) { throw std::out_of_range("Input out of range: " + std::to_string(input)); } // ... }
实战案例
在以下代码片段中,我们将一个泛型 read_data()
函数与异常处理结合起来,从文件中读取任意类型的数据。该函数使用泛型输入流 std::ifstream
Gunakan Pengecualian untuk Pengendalian Ralat
Pengecualian sangat berguna dalam pengendalian ralat. Dengan membuang pengecualian tentang ralat, fungsi boleh menghantar keadaan ralat kepada pemanggil tanpa mengganggu aliran program. Sebagai contoh, pertimbangkan fungsiread_file()
yang cuba membuka fail dan membaca data daripadanya. Jika fail tidak wujud atau tidak boleh dibuka, fungsi boleh membuang pengecualian std::file_not_found
. template <typename T> std::vector<T> read_data(const std::string& filename) { std::ifstream file(filename); if (!file.is_open()) { throw std::file_not_found("File not found: " + filename); } std::vector<T> data; T item; while (file >> item) { data.push_back(item); } return data; } int main() { try { std::vector<int> data = read_data<int>("data.txt"); // ... } catch (const std::file_not_found& e) { std::cerr << "Error: " << e.what() << std::endl; } }
max()
boleh membandingkan dua nilai mana-mana jenis dan mengembalikan nilai maksimum. 🎜rrreee🎜🎜Menggabungkan Pengecualian dan Pengaturcaraan Generik🎜🎜🎜Pengendalian pengecualian dan pengaturcaraan generik berfungsi dengan baik untuk mencipta fungsi boleh guna semula yang mantap. Fungsi generik boleh mengendalikan jenis data yang berbeza, manakala pengecualian membenarkan fungsi gagal dengan anggun apabila ralat ditemui. 🎜🎜Sebagai contoh, pertimbangkan fungsi validate_input()
yang mengesahkan bahawa input pengguna berada dalam julat tertentu. Fungsi ini boleh digenerikkan untuk mengendalikan sebarang jenis data dan membuang pengecualian jika input tidak sah. 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Dalam coretan kod berikut, kami menggabungkan fungsi read_data()
generik dengan pengendalian pengecualian untuk membaca sebarang jenis data daripada fail. Fungsi ini menggunakan aliran input generik std::ifstream
untuk membaca fail dan membuang pengecualian apabila membuka fail. 🎜rrreee🎜🎜Kesimpulan🎜🎜🎜Pengendalian pengecualian dan pengaturcaraan generik dalam C++ ialah alat berkuasa yang boleh meningkatkan kebolehgunaan semula dan kebolehpercayaan kod anda dengan ketara. Dengan menggabungkan kedua-dua teknologi ini, adalah mungkin untuk menulis fungsi yang teguh dan berskala yang mengendalikan pelbagai keadaan ralat dan berfungsi dengan cekap dengan sebarang jenis data. 🎜Atas ialah kandungan terperinci Pengecualian fungsi C++ dan pengaturcaraan generik: menggunakan pengecualian untuk meningkatkan kebolehgunaan semula kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!