etsavの日記: 無名クラス
C++ で抽象クラスのテストをしたかったと思ぃねぃ。
当然ながら抽象クラスそのもののオブジェクトはインスタンス化出来ませぬので、 純粋仮想関数をてきとーに実装した導出クラスを作らなければならないわけで。 まぁ普通にテストクラスの中に nested class を作ればいいわけですけど。
Java だったら無名クラスが使えるよなーとか思い出して、 あ、 無名クラス自体は C++ にもあるよなーとか連想して、 それって構造体タグの省略と文法上は一緒だよなーとか考えて、 それなら関数の中にも書けるはずだよなーとか文法を調べて……
こんなの書いてみました:
#include <iostream>
using namespace std;
class AbstractBase
{
public:
virtual ~AbstractBase() {};
virtual void func(void) = 0;
};
int main(
int argc,
char* argv[]
)
{
class : public AbstractBase
{
public:
virtual void func(void) { cout << "func() implemented." << endl; };
} derived;
derived.func();
return 0;
}
ちゃんと動いてる……な。 new 出来ないのでスコープの外にオブジェクトを持ち越せないから、 使い勝手は悪いけど、 それは同じやり方で無名導出クラスのインスタンスをメンバーに持てば解決……
でも、 テストコード以外では気持ち悪くて使えそうにないのゎ気の所為だろーか。
無名クラス More ログイン