問題タブ [operator-overloading]
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++ - 関数のオーバーロードが失敗しました: これらの演算子が衝突したのはなぜですか?
エンジンとアプリケーションという 2 つの主要な名前空間を含む大きなコード ベースがあります。
エンジンは、vector3 クラスを別の vector3 クラスの typedef として定義します。等値演算子は、vector3 クラスではなく、エンジンの名前空間にあります。アプリケーションの名前空間にも等値演算子を持つクラスをアプリケーションに追加しました。
コンパイルしようとすると、適切な等値演算子が見つからなかったため、関連していないが近くにある vector3 の比較が失敗しました。競合を引き起こしているのではないかと疑ったので、等値演算子を追加したクラスに移動し、コンパイルは成功しました。
しかし、考えてみると、コンパイルが失敗した理由がわかりません。vector3s から自分のクラスへ、またはその逆への暗黙的な変換はなく、引数依存のルックアップは、エンジンの名前空間から等値演算子を取得して一致させる必要があります。
サンプル C++ プロジェクトでこのバグを再現しようとしましたが、壊れません。この問題を引き起こしている大きな大きなコード ベースに何かがあるに違いありませんが、どこから調べればよいかわかりません。ローグの「エンジンを使う」の逆みたいなもの?誰でもアイデアはありますか?
c++ - operator<< をフレンドとして実装するか、メンバー関数として実装する必要がありますか?
それが基本的な質問です。実装する「正しい」方法はありoperator<<
ますか? これを読むと、次のようなことがわかります。
のようなものよりも優先されます
しかし、なぜどちらかを使用する必要があるのか よくわかりません。
私の個人的なケースは次のとおりです。
しかし、私はおそらくできるでしょう:
この決定はどのような根拠に基づいて行う必要がありますか?
注:
段落は文字列です。
c# - C# で角かっこ演算子をオーバーロードするにはどうすればよいですか?
たとえば、DataGridView を使用すると、次のことができます。
しかし、私の人生では、インデックス/角括弧演算子に関するドキュメントを見つけることができません。彼らはそれを何と呼んでいますか?どこに実装されていますか?それは投げることができますか?自分のクラスで同じことを行うにはどうすればよいですか?
ETA: 素早い回答ありがとうございます。簡単に言うと、関連するドキュメントは "Item" プロパティの下にあります。オーバーロードする方法は、次のようなプロパティを宣言することpublic object this[int x, int y]{ get{...}; set{...} }
です。少なくともドキュメントによると、DataGridView のインデクサーはスローしません。無効な座標を指定するとどうなるかについては言及されていません。
ETA 繰り返しますが、ドキュメントにはそれについて言及されていませんが (いたずらなマイクロソフト!)、DataGridView のインデクサーに無効な座標を指定すると、実際には ArgumentOutOfRangeException がスローされることがわかりました。公正警告。
c++ - ostream を取らない、または返さない operator<< をオーバーロードする方法
元の質問
これを実行できるようにすることを目標とするロギング クラスを作成しています。
現在、私の Logger ヘッダーは次のようになっています。
このクラスに関する注意事項:
- クロス プラットフォームの互換性は問題ではありません。
- Logger.cpp の内部には、「実際の」ostream の作成を処理するシングルトン クラスがあります。
- Logger コンストラクターとデコンストラクターは、シングルトンの必要なロックを実行します。
3 つの問題があります。
- operator<< 関数をフレンドまたはメンバーにして、out_stream をプライベートとして設定するにはどうすればよいですか?
- operator<< 関数をマニピュレータで機能させるにはどうすればよいですか?
- T が WCHAR* または std::wstring の場合、out_stream に渡す前に char* または std::string に変換するように特殊化を追加するにはどうすればよいですか? (私は変換を行うことができます。私の場合、高いユニコード文字を失うことは問題ではありません。)
回答で学んだことの要約:
- 後ではなく、友人の前にテンプレートを置きます。
- std::ios::hex はマニピュレータではありません。std::hex はマニピュレータです。
最終結果
c# - C# で代入演算子をオーバーロードするための回避策はありますか?
C++ とは異なり、C# では代入演算子をオーバーロードできません。
非常に大きな数値の算術演算用のカスタム Number クラスを作成しています。int、decimal などの組み込みの数値型のルック アンド フィールを持たせたいと考えています。算術演算子をオーバーロードしましたが、任務はそのまま…
次に例を示します。
その問題の回避策はありますか?
c++ - operator() をオーバーライドする理由
Boost Signalsライブラリでは、() 演算子をオーバーロードしています。
これは C++ の規則ですか? コールバックなどに?
私はこれを同僚のコードで見たことがあります(たまたまBoostの大ファンです)。そこにあるすべてのブーストの良さの中で、これは私を混乱させるだけでした.
この過負荷の理由についての洞察はありますか?
c# - null合体演算子をオーバーロードすることは可能ですか?
C#でクラスのnull合体演算子をオーバーロードすることは可能ですか?
たとえば、インスタンスが null の場合はデフォルト値を返し、そうでない場合はインスタンスを返したいとします。コードは次のようになります。
しかし、null 合体演算子を使用して、MyClass.MyValue が設定されているかどうかも確認したい場合はどうすればよいでしょうか?
.net - 暗黙の演算子と TypeConverters は同等ですか?
TypeConverter に対して暗黙的な演算子を実装するのは非常に簡単に思えるので、フレームワークで TypeConverters が普及しているため、それらは同等ではないと想定しています (FrameworkElement を拡張するものを参照してください)。
しかし、なぜ?string->object および object->string の暗黙的な演算子を作成し、シリアル化 (XML と XAML の両方) でそれらを利用する方がはるかに簡単ではないでしょうか?
ヤグニですか?単独責任?インターフェイスで演算子のオーバーロードを指定できないためですか?
c# - C#コンパイラが暗黙のキャスト演算子を呼び出さないのはなぜですか?
次のタイプがあるとします。
そして、次のコードスニペットをコンパイルしてみてください。
これはうまくコンパイルされ、エラーは発生しませんでした。i1とi2は整数にキャストし、加算が評価されます。
しかし、次のタイプがある場合:
別のコードスニペットをコンパイルしてみてください。
そして、なぜコンパイラが「エラーCS0019:演算子'+'をタイプ'MyNullable<Money>'および'MyNullable <Money>'」のオペランドに適用できないのかという質問がありますか?
c++ - C++ で両方のパラメーターに const を使用して演算子をオーバーライドする
両方の const パラメーターを使用してオーバーライドされた演算子関数を作成しようとしていますが、その方法がわかりません。簡単な例を次に示します。
私がここでやろうとしているのは、const である 2 つの引数を加算関数に渡し、クラス内で何も変更せずに結果を返すことです。
これは可能ですか、どうすればこれを行うことができますか?
ありがとう、
ダン