Boost: создать функцию, которая возвращает вариант

У меня есть задание, чтобы узнать, как использовать Boost :: Вариант. Я пытаюсь создать функцию, которая запрашивает у пользователя тип фигуры для создания. Затем создайте запрошенную форму, назначьте ее варианту и верните ее. Я использую переключатель для достижения этой цели, но я получаю ошибку времени выполнения с оператором по умолчанию.

Я также получаю предупреждение от компилятора: «предупреждение C4715:« ShapeVariant »: не все пути управления возвращают значение»

Как мне просто напечатать строку, если пользователь вводит неправильный выбор?

Спасибо!

#include "boost/variant.hpp"
typedef boost::variant<Point,Line,Circle> ShapeType;

ShapeType ShapeVariant()
{
cout << "Please select a Shape Type\n1: Point\n2: Line\n3: Circle\n\nSelection: ";

int choice;

cin >> choice;

switch(choice)
{
case 1: return Point(); break;
case 2: return Line(); break;
case 3: return Circle(); break;
default: cout << "Invalid selection." << endl; break;
}
}

1

Решение

Вместо того, чтобы печатать строку из функции, вы могли бы вместо этого выдать исключение, которое вызывающий абонент ловит и печатает причину, по которой было сгенерировано исключение.

switch(choice)
{
case 1: return Point(); break;
case 2: return Line(); break;
case 3: return Circle(); break;
default: throw std::runtime_error( "Invalid selection." );
}

В звонилке:

try {
auto result = ShapeVariant();
} catch( std::exception const& e ) {
std::cout << e.what() << std::endl;
}
3

Другие решения

Вы не можете сделать это в C ++, выполнение такого кода приведет к неопределенному поведению в неверном случае. Если выбор действительно неверен, выведите исключение. Вы также можете посмотреть в boost::optional который предназначен для таких случаев, как этот.

0

По вопросам рекламы [email protected]