可変引数テンプレートで多重継承する際のアクセスレベルの個別指定は、たとえばこんな感じです。
・先頭は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メタ関数を使用