Привожу сразу код для прояснения:
struct S {
S(int) {}
};
int iArr[] = { 1, 2, 3 };
S sArr[] = { iArr[0], iArr[1], iArr[2] };
Хочется избежать ручного изменения кода инициализации массива sArr при изменении количества значений в iArr. Интересует именно compile-time инициализация.
Возможно ли это? Если да, то как?
Интересуют варианты как для с++03 (наверное без макросов тут не обойтись), так и современный подход (скорее всего variadic-templates). Если что-то подходящее ожидается в новом Стандарте, то тоже было бы неплохо увидеть в ответах.
Ответ
C++14 решение на базе кода @Abyx:
#include
struct S
{
constexpr S(int i) : i(i*i) { }
int i;
};
template
template
int main()
{
constexpr int iArr[] = { 1, 2, 3 };
constexpr auto sArr = makeArray(iArr);
for( auto& s : sArr )
{
std::cout << s.i << "
";
}
}
Комментариев нет:
Отправить комментарий