我应该使用boost :: variant吗?

时间:2013-07-08 11:08:02

标签: c++ boost boost-variant

我的虚拟功能可以返回单个Tstd::vector<T>。在这种情况下返回boost::variant<T, std::vector<T>>是不是一个好主意,或者最好总是返回std::vector<T>?哪个看起来更好,性能开销最小?返回单个值时使用变量会更快吗?

1 个答案:

答案 0 :(得分:5)

除了性能问题,这取决于函数的语义,或者更确切地说取决于返回值。

您是否经常需要在只返回一个T的情况和多值情况之间区分(代码路径)?或者,在任何一种情况下,一个简单的for(auto t : create_T_orTs()) { ... }能做正确的事吗?

我的直觉是,前者比后者更不可能,并且因为variant<>带有句法“价格”,我会使用KISS并使用std::vector<T>,除非有强烈的语义理由来区分一个和多个值的案例。