ホームページ >バックエンド開発 >C++ >テンプレート プログラミングにおける C++ 関数のデフォルト パラメーターと変数パラメーターの特別な使用法

テンプレート プログラミングにおける C++ 関数のデフォルト パラメーターと変数パラメーターの特別な使用法

WBOY
WBOYオリジナル
2024-04-22 15:12:02644ブラウズ

C でのテンプレート プログラミングにおけるデフォルト パラメータと可変パラメータの特別な使用法: デフォルト パラメータを使用すると、パラメータが指定されていない場合に関数がデフォルト値を使用できるようになり、それによって関数のオーバーロードの汎用化が実現します。変数パラメーターを使用すると、関数は任意の数のパラメーターを受け取ることができるため、コードの多様性が実現し、任意の数のパラメーターを処理する関数または汎用コンテナーに使用できます。実際のケース: デフォルトのパラメーターを使用して、さまざまな種類の小数に対してさまざまな精度を指定する、一般的な 10 進数の書式設定関数を実装しました。

C++ 函数默认参数和可变参数在模板编程中的特殊用法

テンプレート プログラミングにおける C 関数のデフォルト パラメーターと可変パラメーターの特殊な使用法

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';
    }
}
  • 引数の数を一般化します。 可変長引数を使用すると、関数で任意の値を処理できるようになります。パラメータの数を増やしてコードの汎用性を実現します。たとえば、任意の数の引数を渡す sum 関数で可変個引数を使用できます。
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。