空メンバの最適化をVariadic Templatesで
The "Empty Member" C++ Optimization
これにVariadic Templatesを使ってみようと思いついた。
template <typename Member, typename... Bases> struct BaseOpt : Bases... { Member m; template <typename... Arg> BaseOpt(Arg&&... arg) : m(std::forward<Arg>(arg)...) { } }; class X { static void foo() { } }; class Y { static int bar(int x) { return x; } }; struct Z { Z() : m(123) { } BaseOpt<int, X, Y> m; };
ベースクラスにコンストラクタ引数を与えるのは難しそうだ。そこまでするなら手書きした方が早いかもしれない。