使用std :: variant

时间:2017-01-22 19:12:46

标签: c++ ios enums std objective-c++

一般情况下,我正在尝试使用std :: variant创建一个声明性的“union enum”类型,我需要它来描述列表中的位置(UITableView / UICollectionView et.al)。

在Swift中,这正是我需要做的事情:

enum Location {
  case Header
  case Footer
  case Index(NSIndexPath)
}

我的API允许使用“标题”位置(部分和第0行的任意组合),页脚(以及根据部分更改的部分和动态行号的组合)或特定索引路径进行调用。

在c ++中我相信有一个std::variant http://en.cppreference.com/w/cpp/utility/variant允许这种行为:

我需要在Objective-C ++中执行此操作,但会出现编译器错误

enum class Location {
    Header,
    Footer
};

std::variant<Location,Index> location ; (NSIndexPath *)

当我尝试包含#include (or #import) <variant>时,我在XCode中遇到编译器错误variant file not found

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

std::variant是即将发布的C ++ 17标准中包含的一项功能。有些编译器目前支持此功能,但您需要检查它。

如果您的编译器当前支持它,您可以在std::experimental命名空间中找到它,而不是直接在std中找到它。