pythonや他の言語で知られているべき乗演算子の実装のように、構文上の砂糖としていくつかのコードを書いていますが、演算子の定義はOKですが、演算子の署名と一致するオペランド演算子が定義されていないため、エラーが発生します。組み込み型の新しい演算子を実装する方法(コンパイラオプション)はありますか?組み込み型の演算子をオーバーロードする
#include <iostream>
#include <cmath>
template<typename t_Float>
struct PowerTmp {
t_Float value;
};
PowerTmp<double> operator*(double f) {
return {f};
};
double operator*(double l, PowerTmp<double> r) {
return std::pow(l, r.value);
};
int main() {
std::cout << 10.5 *PowerTmp<double>{2.0} << '\n';
cout << 10.5 ** 2.0 << '\n'; //error
};
私はmingwを使用しています。
EDIT:clangは演算子の定義をサポートしていません。
はC++には、 '**'演算子はありません、あなたはそれはPythonであなたが 'のstdを使用する必要がありますように、べき乗であることを期待している場合:: pow'または独自の関数を書く – CoryKramer
@CoryKramerしかし、double型の代わりにユーザ定義型を使用し、この型に数値をキャストすると、ここで定義されたpower-operatorが動作します(実際には2つの演算子* -prefix演算子 – cmdLP