例外と汎用プログラミングを使用すると、C 関数のコードの再利用性が向上します。例外処理はエラーを報告するために使用され、汎用プログラミングにより関数とクラスがデータ型に依存しない方法で動作できるようになります。たとえば、read_file() 関数はファイル データを読み取り、ファイルが存在しない場合は std::file_not_found 例外をスローできます。汎用の validate_input() 関数は入力範囲を検証し、無効な場合は std::range_error 例外をスローします。実際の戦闘では、汎用の read_data() 関数は例外処理を使用してファイルからデータを読み取ります。ファイルが見つからない場合は、std::file_not_found 例外がスローされます。
はじめに
例外処理は、エラーや異常な状況を処理するための C の強力なメカニズムです。これを汎用プログラミングと組み合わせると、コードの再利用性と信頼性が大幅に向上します。この記事では、例外と汎用プログラミングを使用して、堅牢でスケーラブルな関数を設計する方法について説明します。
#例外処理の基本
例外は、予期しない状況を関数に通知するために実行時にスローされるオブジェクトです。 C では、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() 関数は、任意の型の 2 つの値を比較し、最大値を返すことができます。
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 any からの汎用のread_data() 関数と例外処理を組み合わせています。データの種類。この関数は、汎用入力ストリーム
std::ifstream を使用してファイルを読み取り、ファイルを開くときに例外をスローします。
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; } }
結論
C での例外処理と汎用プログラミングは、コードの再利用性と信頼性を大幅に向上させる強力なツールです。これら 2 つのテクノロジを組み合わせることで、幅広いエラー条件を処理し、あらゆる種類のデータを効率的に処理する、堅牢でスケーラブルな関数を作成できます。以上がC++ 関数の例外と汎用プログラミング: 例外を使用してコードの再利用性を向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。