Я хочу иметь std:array
std::function
, но я хочу убедиться, что все элементы массива инициализированы. Для этого я построил класс-оболочку, который принимает std::function
в качестве параметра конструкции.
Но когда я инициализирую массив моего класса-оболочки непосредственно с моей функцией (той, которая должна быть внутри std::function
)он не может скомпилироваться.
Вот проблема, искаженная:
#include <functional>
#include <array>
static void f() {}
using F = std::function<void(void)>;
enum { Count = 4 };
struct C
{
//To get a compilation error when some
// elements of the array are not initialized.
C() = delete;
C(F) {}
};
//OK
static const C c {f};
//OK
static const std::array<F,Count> direct
{
F{f},
{f},
f,
f
};
static const std::array<C,Count> wrapper
{
F{f}, //OK
C{f}, //OK
{f}, //OK
f //could not convert 'f' from 'void()' to 'C'
};
Я попытался изменить массив на std::vector<C>
(хотя это полностью противоречит моей цели использования std:array
для начала), и он отказывается компилировать любую из вышеуказанных инициализаций.