2017-01-22 3 views
0

Im Allgemeinen versuche ich std :: variant zu verwenden, um einen deklarativen "union enum" -Typ zu erstellen, den ich brauche, um einen Ort in einer Liste zu beschreiben (UITableView/UICollectionView et.al) .swifty objective-C++ mit std :: variant

In Swift das ist genau das, was ich tun muss:

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

Meine API entweder ermöglicht mit dem „Header“ Standort (beliebige Kombination von Abschnitt und Zeile 0), der Fußzeile (und Kombination von Abschnitt Aufruf und dynamische Zeilennummer, die sich gemäß dem Abschnitt ändert) oder ein spezifischer Indexpfad.

in C++ Ich glaube, dass es ein std::varianthttp://en.cppreference.com/w/cpp/utility/variant ist, die dieses Verhalten erlaubt:

ich dies in Objective-C++, aber Fehler bekommen Compiler

enum class Location { 
    Header, 
    Footer 
}; 

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

Wenn ich #include (or #import) <variant> aufzunehmen versuchen zu tun, muss ich bekommen ein Compilerfehler, der variant file not found in XCode.

Jeder Weg, dies zu tun?

+2

'std :: variant' ist ein C++ 17-Feature, das von dem von Ihnen verwendeten Compiler möglicherweise nicht unterstützt wird. –

+0

Ich werde Ihre Antwort akzeptieren, wenn Sie möchten –

Antwort

1

std::variant ist eine Funktion, die im kommenden C++ 17-Standard enthalten ist, der gerade fertiggestellt wird. Einige Compiler unterstützen derzeit diese Funktion, aber Sie müssen dies überprüfen.

Wenn Ihr Compiler es derzeit unterstützt, können Sie es in dem std::experimental-Namespace statt direkt in std finden.

Verwandte Themen