Установите значения кортежа, выведя тип из константного массива std::variantC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Установите значения кортежа, выведя тип из константного массива std::variant

Сообщение Anonymous »

— это класс, который содержит кортеж колбасы_ролл и константный массив. Кортеж содержит целые числа и строки, а массив состоит из вариантов.
Метод makeOrder должен установить значение в кортеже колбасы_roll, зная его тип на основе варианта варианта в этом конкретном индексе. Этот метод должен быть доступен во время выполнения.

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

template
class Greggs {
public:
constexpr Greggs(AllArgs... args) : flavours({args...}) {}
bool makeOrder(std::string order, size_t index) {
if (index >= this->flavours.size())
return false;
const std::variant flavour = this->flavours[index];

if (flavour.index() == 0) {  // Checks if the variant is int
int value = std::stoi(order);
this->setSausageRollArg(index, value);
}
else {
this->setSausageRollArg(index, order);
}
return true;
}
private:
template
void printOrder(T value) const {
std::cout makeOrder("73", 0);
return 0;
}
Эта программа компилируется успешно, но при раскомментировании остальных четырех строк в main() выдается следующая ошибка компиляции:

Код: Выделить всё

main.cpp:36:59: error: assigning to 'typename tuple_element::type' (aka 'int') from incompatible type 'std::string'
36 |         if (index == 0) std::get(this->sausage_roll) = value;  // Sets the tuple arg
Ожидаемый результат:

Код: Выделить всё

Sausage roll contains Vegan onions
Sausage roll contains 1 onions
Sausage roll contains 73 onions
Online: https://godbolt.org/z/cnWEsvPhG


Подробнее здесь: https://stackoverflow.com/questions/798 ... stdvariant
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»