2010/08/10

Recent entries from same category

  1. RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
  2. コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」
  3. C++ で flask ライクなウェブサーバ「clask」書いた。
  4. C++ 用 SQLite3 ORM 「sqlite_orm」が便利。
  5. zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。

「new 式」 で、変数を 式 として指定することはできますか? | OKWave
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();
}
Posted at by | Edit