C でのテンプレート プログラミングにおけるデフォルト パラメータと可変パラメータの特別な使用法: デフォルト パラメータを使用すると、パラメータが指定されていない場合に関数がデフォルト値を使用できるようになり、それによって関数のオーバーロードの汎用化が実現します。変数パラメーターを使用すると、関数は任意の数のパラメーターを受け取ることができるため、コードの多様性が実現し、任意の数のパラメーターを処理する関数または汎用コンテナーに使用できます。実際のケース: デフォルトのパラメーターを使用して、さまざまな種類の小数に対してさまざまな精度を指定する、一般的な 10 進数の書式設定関数を実装しました。
C テンプレート プログラミングでは、デフォルト パラメーターと可変パラメーターを使用することで、さまざまな可能性が高まります。コードの効率と汎用性が向上します。特別な使用法を見てみましょう:
デフォルト パラメータ
デフォルト パラメータを使用すると、関数を呼び出すときに特定のパラメータを省略できます。パラメータが指定されていない場合は、デフォルト値が使用されます。例:
template<typename T, typename U = T> auto sum(T a, U b = 0) { return a + b; }
上記の例では、b
はデフォルト パラメータであり、デフォルト値は 0 です。この関数は次のように呼び出すことができます。
int total = sum(10); // b 默认值为 0,结果为 10
可変個パラメータ
可変個パラメータを使用すると、関数は任意の数の引数を受け取ることができます。これらは、...
演算子を使用して表されます。例:
template<typename T> auto print_all(T... args) { for (auto arg : {args...}) { std::cout << arg << ' '; } std::cout << '\n'; }
この例の args
は、任意の数の T
型引数を受け取ることができる可変長引数パックです。この関数は次のように呼び出すことができます:
print_all(1, 2.5, "hello"); // 输出:"1 2.5 hello"
テンプレート プログラミングにおける特別な使用法
template<typename T, typename D = char> auto print_delimited(T value, D delimiter = ' ') { std::cout << value; if constexpr (std::is_same_v<D, char>) { // 如果分隔符为字符 std::cout << delimiter; } else { // 如果分隔符为字符串 std::cout << delimiter << '\n'; } }
template<typename T> auto sum_all(T... args) { return (... + args); }
template<typename T, typename Alloc = std::allocator<T>> class Vector { public: Vector(T... args) { for (auto arg : {args...}) { emplace_back(arg); } } };
実践例
汎用 10 進形式関数を作成する、デフォルトのパラメーターを使用して、さまざまな種類の小数にさまざまな精度を指定します:
template<typename T, typename D = T, D precision = 2> std::string format_float(T value) { std::stringstream ss; ss << std::fixed << std::setprecision(precision) << value; return ss.str(); }
この関数は次のシナリオで使用できます:
std::cout << format_float(3.14159265) << '\n'; // 输出:"3.14" (默认精度为 2) std::cout << format_float<float>(3.14159265, 6) << '\n'; // 输出:"3.141593" (精度为 6)
以上がテンプレート プログラミングにおける C++ 関数のデフォルト パラメーターと変数パラメーターの特別な使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。