Boost:创建一个返回变体的函数
Posted
技术标签:
【中文标题】Boost:创建一个返回变体的函数【英文标题】:Boost: create a function that returns a variant 【发布时间】:2012-10-06 20:31:42 【问题描述】:我有一个任务是学习如何使用 boost::variant。我正在尝试创建一个要求用户创建形状类型的函数。然后创建请求的形状并将其分配给变体并返回它。我正在使用 switch 来完成此操作,但使用 default 语句时出现运行时错误。
我还收到来自编译器的警告:“警告 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;
【讨论】:
【参考方案2】:您不能在 C++ 中执行此操作,运行此类代码将在无效情况下导致未定义的行为。如果选择确实无效,则抛出异常。您还可以查看专为此类案例设计的 boost::optional
。
【讨论】:
以上是关于Boost:创建一个返回变体的函数的主要内容,如果未能解决你的问题,请参考以下文章