Я пытаюсь вывести тип поля класса в конструкторе следующим образом:
#include <tuple>
template <size_t k>
struct A {
int val = k;
void increment() { val++; }
};
class Container {
auto data;
public:
Container() : data(std::make_tuple(A<1>{}, A<2>{}, A<3>{})){ }
void incrementAll() {
std::apply([](auto... args){ (args.increment(), ...); }, data);
}
};
int main() {
Container c;
c.incrementAll();
return 0;
}
при попытке скомпилировать это с помощью GCC 7.2.0 получаю ошибку вида:
error: non-static data member declared with placeholder auto
Инициальзировать поле data как constexpr static
нельзя, т.к. кортеж изменяемый.
Практически, вы пытаетесь определить тип члена data
во время выполнения. Но размер типа должен быть известен во время компиляции, потому и во время компиляции должны быть известны типы его членов. Следовательно ваша попытка является ошибкой, тогда как вы смогли бы просто указать его конкретный тип. И, как замечание: метод incrementAll
не имеет никаких аргументов и не является шаблонным, поэтому он не может знать какие аргументы принимает лямбда. Так что тут тоже вы изрядно все запутали
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Задание звучит так: Представить таблицу в виде линейного списка L, элементами которого являются строки таблицы: №, Фамилия, Оценки (Физика,...