15

C++ (C++11) でミックスインを作成することは可能ですか? クラスごとではなく、インスタンスごとに動作を作成したいと考えています。

Scalaでは、匿名クラスでこれを行います

val dylan = new Person with Singer
4

2 に答える 2

33

これらが既存のクラスである場合:

class Person
{
public:
    Person(const string& name): name_(name) {}
    void name() { cout << "name: " << name_ << endl; }

protected:
    string name_;
};

class Singer
{
public:
    Singer(const string& song, int year): song_(song), year_(year) {}
    void song() { cout << "song: " << song_ << ", " << year_ << endl; }

protected:
    string song_;
    int year_;
};

次に、C++ 11 でこの概念をいじることができます。

template<typename... Mixins>
class Mixer: public Mixins...
{
public:
    Mixer(const Mixins&... mixins): Mixins(mixins)... {}
};

次のように使用します。

int main() {    
    Mixer<Person,Singer> dylan{{"Dylan"} , {"Like a Rolling Stone", 1965}};

    dylan.name();
    dylan.song(); 
}
于 2013-07-13T08:58:47.170 に答える