問題タブ [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++ - C ++でフレンド関数と演算子のオーバーロードを定義する方法
C++ でのフレンド関数と演算子のオーバーロードと、それらがどのように機能するかについて知りたいですか? プログラムで?
c# - C# で Perl のようなバインド演算子 (=~) を定義できますか?
Perl で =~ と !~ を使用して、正規表現に対して文字列を評価できることが本当に気に入っています。この機能を C# に移植したいのですが、演算子をオーバーロードすることはできますが、新しい演算子を作成することはできないようです。
文字列型を拡張して、正規表現を渡して評価できるようにする Match() メソッドを提供することを検討していますが、もっと良い方法があるのではないかと考えています。
誰もがより良い解決策を持っていますか?
c++ - 過負荷。-> および :: マルチプラットフォーム クラスで使用するため
サポートしたい OS ごとに 1 つずつ、3 つのウィンドウ クラスがあるとします。
- Windowsウィンドウ
- OSXウィンドウ
- Linuxウィンドウ
それらはすべてWindowクラスから継承します。これは、インスタンス化するクラスでもあります。Window クラスには . -> および :: 演算子がオーバーロードされ、(IFDEF に基づいて) 実行されている OS に応じて、this ポインターが関連するクラスにキャストされます。
私がやりたいことは、どの OS が実行されているかについての手がかりなしに Window インスタンスを作成することです。この考え方はかなり間違っていますか?ダウンキャストは危険ですか?これを行うためのより良い方法はありますか?
これを行うためのライブラリがあることは承知していますが、自分で試してみたいと思います。
最も簡単な方法は、工場を作成することだと思います。しかし、このようなことができるでしょうか?
c++ - C++ テンプレートを使用して単純型をカプセル化する
C++ のすべての単純型に機能を追加しようとしています。
カプセル化する型をテンプレート パラメーターとして受け取り、すべての演算子を定義して、カプセル化されたクラスがカプセル化された単純な型とまったく同じように機能する、単一のテンプレート クラスを作成したいと考えています。
このようなもの:
問題は、対処しなければならない微妙なニュアンスがたくさんあり、特殊なテンプレート オペレーターが書かれていることです。代わりにそれを使用できるように、これが既に行われている場所はありますか?
ブーストは大きすぎて複雑すぎてプロジェクトに入れることができませんが、このようなクラスがそこにある場合はポインタを調べることができます-ある場合、その名前は何ですか?
c++ - operator>= のオーバーロードによる奇妙な動作
C++ での演算子のオーバーロードで奇妙な動作が発生しています。クラスがあり、その内容が long double 以上かどうかを確認する必要があります。このチェックを行うために >= 演算子をオーバーロードしました。私の宣言は次のとおりです。
私のクラスには、特定の条件下でのみ例外なく機能するキャストからロングダブルへの演算子もあると言わざるを得ません。ここで、この演算子を使用すると、コンパイラーは operator>= の使用があいまいであり、代替手段は次のとおりであると不平を言います。
- 私の。
- 組み込みの
operator>=(long double, int)
.
では、プログラムに演算子を強制的に使用させるにはどうすればよいでしょうか?
c++ - テンプレート化されたostream<<演算子を作成しないコンパイラ
私はクラスを持っており、頭の中で次のように定義されています:
実装ファイルには、次のものがあります。
これはすべてかなりコーシャに見えます。ただし、この演算子(つまり、std :: cout << MyClass())を使用しようとすると、次のリンカーエラーが発生します。
コンパイラが自動的にこれを生成していないことに驚いています...私が間違っていることについて何か提案はありますか?
c++ - 新規/削除のオーバーロード
私は自分のプログラムで小さなメモリ リーク ファインダーを作成していますが、new と delete (および new[] と delete[]) をオーバーロードする方法は何もしていないようです。
私がオーバーロードした方法new
は、上記のコード スニペットに示されています。演算子が void* を返すことによるものだと思いますが、どうすればよいかわかりません。
c# - 0およびnullに対してテストするためにC#クラスを作成するにはどうすればよいですか?
背景: C#(2005)で記述されたカスタムクラスがあり、コードは次のようになっています。
Savepointspで変数が宣言された後。次のようなコードでインスタンス化されているかどうかをテストできます。
質問:クラス演算子をオーバーロードして、次の構文も使用できるようにすることは可能ですか:if(sp){...}またはif(sp!= 0){...}
PS:習慣の力以外の場合(sp)を書きたいと思う本当の理由はありません。