std::tuple
to bestia ładowana szablonami. Aby uzyskać dostęp do n-tego kompilatora, członek musi wykonać wiele instancji szablonu, chociaż jego prosta natura: dostęp do n-tego członka danych odpowiadającej wyimaginowanej strukturze. Wydaje się, że std::tuple
powinna być cechą języka rdzeń, coś jak to (Pseudokod):Agregaty Variadic jako funkcja języka podstawowego
template< typename ...types >
struct/* or class, or even union */ V
{
types... V; // defines implicitly `operator [/*constant expression*/]` to access by index
// if more than one variadic parameter pack provided
// (during expanding of parameter pack of template
// parameters in specializations) then instead of
// `V` there can be specific data-member name (say, `x`),
// but still with `x.operator []` implicitly defined
// member functions and data members allowed
};
template< typename ...types >
V< std::decay_t<types>... > make_tuple(types &&... args)
{ return {std::forward<types>(args)...}; }
template< typename ...types >
V< types &&... > forward_as_tuple(types &&... args)
{ return {std::forward<types>(args)...}; }
template< typename ...types >
V< types &... > tie(types &... args)
{ return {args...}; }
Czy istnieje jakakolwiek propozycja czegoś podobnego języka obsługiwane danych o zmiennej liczbie argumentów członów definicji składni dla klas?
Jaką korzyść ma ta funkcja języka rdzennego? dlaczego tylko 'std :: tuple'? dlaczego nie "std :: vector" również? Uważam, że jeśli coś można zrobić jako funkcję biblioteki, należy to zrobić, * tylko jeśli * to nie jest możliwe (lub zbyt hakerstwo, aby to zrobić) ma sens dodanie funkcji języka. – Nawaz
@Nawaz POD tablica (pojedynczy typ, wiele wartości) już obecne w języku, 'int x [3] = {1, 2, 3};'. – Orient
Bez względu na "typy ... V;', 'operator [] (size_t)' nie może istnieć. – Barry