基本クラスオブジェクトを派生クラスオブジェクトに割り当てる理由と方法を示すもう1つの答えを書く。
struct TimeMachineThing_Data {
..
..
};
class TimeMachineThing : private TimeMachineThing_Data
{
static std::stack<TimeMachineThing_Data> m_stateHistory;
void SaveState() {
m_stateHistory.push_back(static_cast<TimeMachineThing_Data&>(*this));
}
void RestoreState() {
static_cast<TimeMachineThing_Data&>(*this) = m_stateHistory.front();
m_stateHistory.pop_front();
}
};
これは非常に有用で完全に正当です。
(ここではこれだけの内部TimeMachineThingは、IS-TimeMachinetime_Data、民間の継承である)
もう一つ。
struct StructWithHundresField {
string title;
string author;
...
StructWithHundresField() {
...
}
};
class EasyResetClass : public StructWithHundresField {
int not_reset_this_attriute;
public:
void ResetToInitialStateAtAnyTime() {
static_cast<StructWithHundresField&>(*this) = StructWithHundresField();
}
}
なぜこれをやりたいですか? –
それは良い質問です。そのような割り当ての意味はどうでしょうか? – Kos
MS VC ATLライブラリにはいくつかの用途があります。 – 9dan