次のような構造体があるとします。
struct Foo
{
const int bar;
const char baz;
Foo& operator=(const Foo& other)
{
memcpy(this,&other,sizeof(Foo)); //How am I supposed to write this decently?
return *this;
}
}
Foo のすべてのフィールドを final にしたいし、Foo 型の変数を他のプリミティブ値型と同じように動作させたい。たとえば、int、確かに次のようなものを書くことができます。
int i = 0;
i = 42;
Foo foo = {007,'B'}
foo = {42,'X'}
しかし、私の貧弱な Foo 型の場合、型の安全性チェックを回避するために memcpy のような手段に頼る必要がありますか? const 修飾子を削除し、フィールドをプライベートとしてマークし、いくつかのゲッターを追加できることはわかっていますが、それは重要ではありません。= 演算子の内容を適切に記述する方法があるかどうかを知りたいだけです。
前もって感謝します!
~~~~~
次の例を確認してください。
//If the = op is not implemented, this won't compile
Foo stat;
for(int i=0;i!=100;++i)
{
stat = func(i);
if(stat.bar == 0)...
}
//But weird thing is, if I declare the 'stat' inside the for block, it works just fine with gcc
for(int i=0;i!=100;++i)
{
Foo stat = func(i);
//printf("%p\n",&stat); => same variable same address!!
if(stat.bar == 0)...
}
それはあなたにとって意味がありますか?