meryngii.neta

今日も新たな"ネタ"を求めて。

空メンバの最適化を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;
};

ベースクラスにコンストラクタ引数を与えるのは難しそうだ。そこまでするなら手書きした方が早いかもしれない。