問題タブ [non-member-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 無料関数の部分的なテンプレートの特殊化-ベストプラクティス
ほとんどのC++プログラマーが知っておくべきことですが、フリー関数の部分的なテンプレートの特殊化は許可されていません。たとえば、以下は不正なC++です。
ただし、クラス/構造体の部分的なテンプレートの特殊化は許可されており、無料の関数の部分的なテンプレートの特殊化の機能を模倣するために利用できます。たとえば、最後の例の目標は、次を使用して達成できます。
それはよりかさばり、簡潔ではありませんが、それは仕事を成し遂げます-そしてユーザーmul
に関する限り、彼らは望ましい部分的な専門化を取得します。
私の質問は次のとおりです。テンプレート化された無料の関数(他の人が使用することを目的としています)を作成する場合、実装をクラスの静的メソッド関数に自動的に委任して、ライブラリのユーザーが部分的な特殊化を自由に実装できるようにする必要があります。テンプレート化された関数を通常の方法で記述し、人々がそれらを専門化できないという事実を受け入れますか?
c++ - Doxygen を使用した C++ での関数のドキュメント化
ドキュメントを生成するために Doxygen を使用しているプロジェクトがあります。クラスのドキュメンテーションは問題ありませんが、オブジェクトなどを作成するために使用する非メンバー関数もいくつかあります。これらもドキュメンテーションしたいのですが、何を試しても、Doxygen はドキュメンテーションを生成しません。関数の上に付けたコメント。Doxygen がグローバル名前空間の関数のドキュメントを生成しないのはなぜですか? また、これを機能させるにはどうすればよいですか?
c++ - Can C++ assignment operators be free functions?
I'm trying something like this:
But I'm getting this error:
Are there limitations on which operators can/cannot be defined as Free Functions, and if so, why?
c++ - プライベートメンバーと無料機能のDoxygenコメント?
プライベート メンバーと無料関数に Doxygen コメントを使用する必要がありますか? 私は Java の世界から来ましたが、プライベート メンバーに Javadoc を追加したことはありません。これは C++ の世界で受け入れられる慣行ですか?
c++ - 演算子のオーバーロード:メンバー関数と非メンバー関数?
メンバー関数として宣言されたオーバーロードされた演算子は、1つのパラメーターしか持てず、他のパラメーターが自動的に渡されるため、非対称this
であると読みました。したがって、それらを比較するための標準は存在しません。一方、aとして宣言されたオーバーロードされた演算子はfriend
、同じ型の2つの引数を渡すため、対称であり、したがって、それらを比較できます。
私の質問は、ポインタの左辺値を参照と比較できるのに、なぜ友達が好まれるのかということです。(非対称バージョンを使用すると、対称バージョンと同じ結果が得られます)STLアルゴリズムが対称バージョンのみを使用するのはなぜですか?
c++ - 静的メンバー関数
この質問で sbi と Eli Bendersky の回答を読んだ後、静的メンバー関数が何のためにあるのか疑問に思い始めました。
クラスのフレンドフリー関数は、静的メンバー関数ができることを何もできないはずですか? もしそうなら、なぜ/いつ、友達のないメンバー関数よりも静的メンバー関数を好むべきですか?
c++ - クラステンプレートのフレンド関数
クラステンプレートがありFoo<T>
ます。
Bar
2つのsを取りFoo
、を返す非メンバー関数を実装したいと思いますFoo
。発信者が書くよりもBar
自然になるので、私は非会員になりたいです。計算が簡単で頻繁なので、私もなりたいです。Bar(f1, f2)
f1.Bar(f2)
Bar
inline
秘訣は、のプライベートデータBar
にアクセスする必要があることです。Foo
プライベートデータへのアクセサーを持たない方がいいです。プライベートデータをユーザーに公開する正当な理由はありません。Bar
だから私はの友達を作りたいですFoo
。
ここで私は問題にぶつかります。コンパイラは文句を言います:
フレンド宣言が関数テンプレートの特殊化を参照している場合、インライン指定子は使用できません。
このルールは標準によって課されていますか、それともMSVC ++に固有ですか?
これが私が試したことです:
const
Bar
public member関数を作成してから、単に。を返す非メンバーバージョンを宣言しますlhs.Bar(rhs)
。これは最もハッキーな解決策のようです。inline
コンパイラがヒントに関係なくインライン化を決定することを知って、ヒントを削除します。次に、これは単一定義規則に違反しますか?関数テンプレートであるため、ヘッダーファイルで定義する必要があります。ダミーのテンプレートタイプを使用してメンバー関数を宣言します。
/li>
なぜそれが機能するのか完全にはわかりませんが、コンパイラーは満足しています。
より良い解決策はありますか?
c++ - 非メンバー関数による演算子のオーバーロード
この質問への答えは私にはわからないようですが、非メンバー関数でオーバーロードするにはどうすればよいでしょうか。プログラム レベルの関数を作成しただけで、プロトタイプ (または定義) が存在する場合、演算子はそのクラス型に対してオーバーロードされていますか?
c++ - メソッド内でオブジェクトを受け取る非メンバー関数を呼び出す方法
クラス Student があり、"function_A" という名前の非メンバー関数を既に宣言しているとします。この関数は、Student 型を引数として受け取ります。
ここで、Student クラスの内部にメンバー関数があり、その中で、以前に宣言された非メンバー関数 "function_A" を参照したいとします。引数として何を渡しますか (引数自体は Student 型である必要があります)。
c++ - 有効な C++ 項目 23 メンバー関数より非メンバー非フレンド関数を優先する
クラス設計に関するいくつかの事実、具体的には関数がメンバーであるべきかどうかについて戸惑いながら、私はEffective c++を調べて、アイテム23、つまりメンバー関数よりも非メンバー非フレンド関数を優先することを見つけました。Web ブラウザーの例で最初にそれを読むと、ある程度の意味がありましたが、その例の便利な関数 (本ではこのような非メンバー関数と呼ばれます) はクラスの状態を変更しますよね?
それでは、最初の質問です。
もう少し読んで、彼は STL 関数を検討します。実際、一部のクラスで実装されていない一部の関数は stl で実装されています。
std::sort
本のアイデアに従って、それらは、std::copy
fromなどのいくつかの合理的な名前空間にパックされたいくつかの便利な関数に進化しますalgorithm
。たとえば、vector
クラスには関数がなくsort
、stlsort
関数を使用するため、ベクトル クラスのメンバーではありません。assign
しかし、メンバーとしてではなく便利な関数として実装できるように、同じ推論をベクトルクラスの他の関数に拡張することもできます。ただし、それは操作対象のソートなどのオブジェクトの内部状態も変更します。では、この微妙だが重要な (私が推測する) 問題の背後にある理論的根拠は何でしょうか。
もしあなたがその本にアクセスできるなら、これらの点をもう少し明確にしてもらえますか?