To interesujący problem, który myślę o czasach wcześniej. Biorąc pod uwagę struct
z podstawowej kruszywa:Uniwersalna inicjacja agregacji za pomocą szablonów variadic
#include <array>
template <typename T, size_t N>
struct A
{
constexpr A() = default;
template <typename ... Ts>
constexpr A(const T& value, const Ts& ... values); // magic
std::array<T, N> arr; // aggregate
};
Jak wdrożyć zmiennej liczbie argumentów szablonu konstruktora A(const T& value, const Ts& ... values)
do
- zaakceptować obie wartości typu
T
i innyA<T, N>
- właściwie zainicjowana bazowego kruszywo na podstawie wartości reprezentowanych przez przekazane argumenty:
- respektować zdolności kruszywa
- wsparcia C++ 14 zasad constexpr i nie wprowadzają żadnego narzutu wykonania
spełniających powyższe wymagania, można wykonać następujące czynności:
int main()
{
A<int, 3> x(1, 2, 3);
A<int, 2> y(1, 2);
A<int, 6> a(x, 1, 2, 3);
A<int, 6> b(1, x, 2, 3);
A<int, 6> c(1, 2, x, 3);
A<int, 6> d(1, 2, 3, x);
A<int, 6> e(x, x);
A<int, 6> f(y, y, y);
return 0;
}
Jaka jest oczekiwana wartość 'y [2]' w 'A y (1,2);'? –
A co z obciążeniem środowiska wykonawczego wywołania konstruktora? –
@VaughnCato dzięki za złapanie, który był błędem, zaktualizowany teraz – plasmacel