web-dev-qa-db-ja.com

C ++のヘルパー関数とは何ですか?

The C++ Programming Language by Bjarne StroustrupからC++のヘルパー関数を理解しようとしていました。しかし、本はそれについて何も説明しておらず、クラスでそれを使用する目的についても説明していません。 Webで検索してみましたが、 this が見つかりました。私はそれの要点を知っていますが、ヘルパー関数の本当の目的は何なのか、それらをいつ使うべきか、そして全体としてヘルパー関数とは何なのかまだわかりませんか?

25
Sumit Gera

"helper function"は標準で見つかる用語ではなく、正確な定義もありません...標準的な言及 "ヘルパークラス"または "ヘルパーテンプレート"クラスを参照します。これはエンドユーザーによってインスタンス化されることを意図していませんが、別のクラス内で内部的に使用される有用な機能を提供します。

ヘルパー関数とは(ほとんどの人が言うとき、私が信じていることです)通常、再利用する有用な機能をラップする関数です。さまざまな種類の目的に使用するヘルパー関数を作成できます...

例としては、あらゆる種類の変換関数があります。たとえば、マルチバイトエンコードstd::stringからstd::wstring

std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo( size_needed, 0 );
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}
28
LihO

CppCoreGuidline からのヘルパー関数の素晴らしい定義があります:

ヘルパー関数は、クラスの表現に直接アクセスする必要はありませんが、クラスへの便利なインターフェイスの一部と見なされる関数です(通常はクラスのライターによって提供されます)。クラスと同じ名前空間にそれらを配置すると、クラスとの関係が明確になり、引数依存のルックアップによってそれらを見つけることができます。

詳細については、明確な例を使用して paragraph を確認し、そこから上位の引用符を取得してください。

7
Oleh Holovko

例としては、メイン関数全体で再利用する入力検証関数があります。ユーザーの年齢を尋ねるプログラムがあるとします。年齢は0より大きい整数なので、「cin >> users_age;」を処理する別の関数が必要になります。入力が条件ステートメントを満たす場合は続行し、そうでない場合はユーザーに年齢を再入力するように依頼します。

これは「ヘルパー関数」の一例です。間違っている場合は、読者を修正してください。ありがとう!

1
Ben10_nf.

「ヘルパー関数」はBjarne Stroustrupsの本で説明されており、私は昨日それらについて読んでいました。 Stroustrupによると、クラスの適切な設計では、クラスを実装する関数の数を最小限に抑える必要があります。 Stroustrupによれば、クラスに50個の関数を持ちたくないのです。代わりに、クラスインターフェイスを使用する「メンバー関数を呼び出す」「ヘルパー関数」を使用します。それらは、おそらく(これについてはわかりませんが)共有ネームスペースで定義して、「関係」に意味を持たせることができます。本のパラグラフは、第9章のセクション9.7.5にあります。

0
user9528449