だから私は基本的にソースコード(シェーダー用)をまとめるこの「フレームワーク」を作成しています。ステートメント クラスを作成し、そのすべての演算子をオーバーロードして (意味を完全に変えて) 他のステートメントを自然な方法で形成するというアイデアを思いついたとき、私はかなり賢いと思いました。次のようになります。
class Statement {
public:
Statement operator=(const Statement &other) const;
Statement operator+(const Statement &other) const;
...
}
しかし、私が終わったと思ったとき、演算子 = は戻り値を完全に無視し、代わりに常に「=」の前にオブジェクトを返すことが判明しました。これを達成する方法がないことを正しく理解していますか?
編集:わかりました、申し訳ありませんが、私が提供した例はコンパイルされます(私は演算子を A でもオーバーロードしましたが、機能しませんでした)。
編集 2: operator= は実際には意図的に const です。意図した意味は、新しい代入ステートメント オブジェクトを作成することです。
例:
Block b; // Represents a sequence of commands.
Statement var1, var2; // Represent some variables.
...
b.append(var1 = var2);
想定: b には、コマンド var1 = var2; が含まれています。
観測: b には var1 が含まれます。
解決済み:問題は、デフォルトの operator= を使用する Statement の代わりに派生クラスを使用していたためでした。みんな、ありがとう。