デザイナーが(Javaのやり方で)OOPがThe One True Wayであり、すべてがクラスのメソッドでなければならないと決定したため、拡張メソッド(および「静的クラス」も)はC#/ Java言語でのみ存在します:
これはC ++のやり方ではありません。 C ++では、クラスの動作を拡張するために、名前空間、フリー関数、 Koenigルックアップがあります。
namespace foo
{
struct bar { ... };
void act_on_bar(const bar& b) { ... };
}
...
foo::bar b;
act_on_bar(b);//No need to qualify because of Koenig lookup
私は通常、拡張メソッドが有害であると考えます。クラスにあまりにも多くの振る舞いを付けると、クラスが存在する理由を捕らえることができなくなります。また(「部分クラス」のように)、クラスに関連するコードをローカル以外のものにする傾向があります。どちらが悪いですか。
あなたの問題については、C + +で単純に:
template
T swap_endian(T x)
{
union { T value; char bytes[sizeof(T)]; } u;
u.value = x;
for (size_t i = 0; i < sizeof(T)/2; i++)
swap(u.bytes[i], u.bytes[sizeof(T) - i - 1]);
return u.value;
}
使用法:
swap_endian(42);
タイプが推測できる場合は、
std::uint64_t x = 42;
std::uint64_t y = swap_endian(x);