Of course it will not be high performance, but it can be done. (E .g. Eigen library.)
template<typename... Ts> class SoA : public tuple<vector<Ts>...> { // ... template<size_t... Is> tuple<Ts&...> subscript(size_t i, index_sequence<Is...>) { return {get<Is>(*this)[i]...}; } public: // ... auto operator[](size_t i) { return subscript(i, index_sequence_for<Ts...>{}); } };
Of course it will not be high performance, but it can be done. (E .g. Eigen library.)