via: ときどきの雑記帳
ところでpermalinkがおかしい気がする。あと最近のときどきの雑記帳はときどきどころでない気がするw
「new 式」 で、変数を 式 として指定することはできますか?こんな?
例えば次のような感じで、変数clの内容によりclassAあるいはclassBをnew
するようなことがしたいです。
class base [ ... };
class classA : public base { .... };
class classB : public base { .... };
classA* ca;
classB* cb;
base* cl;
cl = classA;
ca = new cl;
cl = classB;
ca = new cl;
これにより、多種のclassをnewする際にいちいち
pa = new classA;
pb = new classB;
pc = new classC;
pd = new classD;
............
としないで、
for (n=0; n<xxx; n++)
p[n] = new cl[n];
…みたいに簡潔に書けないかなと考えてます。
よろしくお願いします。
#include <iostream>
using namespace std;
class base {
public:
virtual void hello() const =0;
};
class classA : public base { void hello() const { cout << "classA\n"; }};
class classB : public base { void hello() const { cout << "classB\n"; }};
class classC : public base { void hello() const { cout << "classC\n"; }};
class classD : public base { void hello() const { cout << "classD\n"; }};
template<typename T> base* create() {
return new T;
}
int main(){
typedef base* (*factory)();
factory p[] = {
create<classA>,
create<classB>,
create<classC>,
create<classD>
};
for (int n = 0; n < 4; n++)
p[n]()->hello();
}