続・可変引数テンプレートで多重継承

可変引数テンプレートで多重継承する際のアクセスレベルの個別指定は、たとえばこんな感じです。


・先頭はpublic継承、先頭以外はprivate継承

class knight {};
class item_usable {};
class guardable {};

template <class Head, class... Tail>
class job : public Head, private Tail... {};

// knightはpublic継承、item_usable/guadableはprivate継承
typedef job<knight, item_usable, guardable> Knight;


・(可変個の意味がないけど)一つひとつ指定

template <class... Bases>
class job : public at<0, tuple<Bases...>>::type,
            public at<1, tuple<Bases...>>::type,
            private at<2, tuple<Bases...>>::type
{};

class knight {};
class wizard {};
class summonable {};

// knight/wizardをpublic継承、summonableをprivate継承
typedef job<knight, wizard, summonable> HolyKnight;

HolyKnight agrias;

atメタ関数を使用