class Hoge
{
public:
void Begin();
void End();
// その他メンバ関数
void Func1();
void Func2();
};
void main() {
Hoge a;
a.Begin();
a.Func1();
a.Func2();
a.End();
}
しかし、オブジェクト数が増えるとこの作業は手間です。
なので次のようなクラスを考えました。
template <class T>
class Auto
{
public:
Auto() { T.Begin(); }
~Auto() { T.End(); }
operator T&() { return val_; }
private:
T val_;
};
// 例えば次のようにしたいがコンパイルエラー
void main() {
Auto<Hoge> a;
a.Func1(); // aをHogeのオブジェクトであるかのように扱いたい
}
// 実行可
void main() {
Auto<Hoge> a;
static_cast<Hoge>(a).Func1(); // 余計ややこしい
}