Информация об изменениях

Сообщение Инициализация массива класса через шаблон от 01.09.2015 3:02

Изменено 01.09.2015 3:39 koenjihyakkei

Можно ли через variadic tamplates (или как-то еще) инициализировать массив в классе?
Например, как-нибудь так:
typedef bool (*fnCheck)(Object1&, Object2&);

template<fnCheck ... A>
class Foo
{
public:
    Foo() : array(A...) {} // error
    bool check() {
        // перебор массива, например
    }
private:
    fnCheck array[sizeof...(A)];
};

// и вот так использовать:
Foo<fn1, fn2, fn3> checker1;
Foo<fn2, fn3> checker2;
Foo<fn3, fn2, fn4, fn6> checker2;
Инициализация массива класса через шаблон
Можно ли через variadic tamplates (или как-то еще) инициализировать массив в классе?
Например, как-нибудь так:
typedef bool (*fnCheck)(Object1&, Object2&);

template<fnCheck ... A>
class Foo
{
public:
    Foo() : array(A...) {} // error
    bool check() {
        // перебор массива, например
    }
private:
    fnCheck array[sizeof...(A)];
};

// и вот так использовать:
Foo<fn1, fn2, fn3> checker1;
Foo<fn2, fn3> checker2;
Foo<fn3, fn2, fn4, fn6> checker2;


Update
Нашел способ обернуть массив в структуру, вот так — http://ideone.com/NbRQEu
Не очень красиво, но вполне приемлемо, пока других вариантов нет.