2017-01-22 7 views
0

В общем, я пытаюсь использовать std :: variant для создания декларативного типа union enum, который мне нужен для описания местоположения в списке (UITableView/UICollectionView et.al) ,swifty object-C++ using std :: variant

В Swift это именно то, что мне нужно сделать:

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

Мой API либо позволяет вызова с «заголовком» Расположение (любое сочетание раздела и строки 0), в сноске (и комбинации раздела и номер динамической строки, который изменяется в соответствии с разделом) или конкретный путь индекса.

В C++ я считаю, что есть std::varianthttp://en.cppreference.com/w/cpp/utility/variant, который позволяет такое поведение:

Мне нужно сделать это в Objective-C++, но получаю ошибки компилятора

enum class Location { 
    Header, 
    Footer 
}; 

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

Когда я пытаюсь включить #include (or #import) <variant> я получаю ошибка компилятора, которая variant file not found в XCode.

Любой способ сделать это?

+2

'std :: variant' - это функция C++ 17, которая может не поддерживаться используемым вами компилятором. –

+0

Я приму ваш ответ, если вы захотите –

ответ

1

std::variant - это функция, включенная в предстоящий стандарт C++ 17, который находится в процессе завершения. Некоторые компиляторы в настоящее время поддерживают эту функцию, но это то, что вам нужно проверить.

Если ваш компилятор в настоящее время поддерживает его, вы можете найти его в пространстве имен std::experimental вместо непосредственно в std.