У меня есть задание, чтобы узнать, как использовать 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;
}
}
Вместо того, чтобы печатать строку из функции, вы могли бы вместо этого выдать исключение, которое вызывающий абонент ловит и печатает причину, по которой было сгенерировано исключение.
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;
}
Вы не можете сделать это в C ++, выполнение такого кода приведет к неопределенному поведению в неверном случае. Если выбор действительно неверен, выведите исключение. Вы также можете посмотреть в boost::optional
который предназначен для таких случаев, как этот.