2017-01-22 2 views
0

En général, j'essaie d'utiliser std :: variant pour créer un type déclaratif "union enum" dont j'ai besoin pour décrire un emplacement dans une liste (UITableView/UICollectionView et.al) .swifty objectif-C++ en utilisant std :: variante

Swift ceci est précisément ce que je dois faire:

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

Mon API permet soit d'appeler l'emplacement « en-tête » (Toute combinaison de l'article et la ligne 0), le pied de page (et la combinaison de l'article et numéro de ligne dynamique qui change selon la section), ou un chemin d'index spécifique.

En C++ Je crois qu'il ya un std::varianthttp://en.cppreference.com/w/cpp/utility/variant qui permet ce comportement:

que je dois faire en Objective-C++, mais obtenir des erreurs du compilateur

enum class Location { 
    Header, 
    Footer 
}; 

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

Lorsque je tente d'inclure #include (or #import) <variant> je reçois une erreur de compilation variant file not found dans XCode.

Un moyen de le faire?

+2

'std :: variant' est une fonctionnalité C++ 17 qui n'est peut-être pas supportée par le compilateur que vous utilisez. –

+0

Je vais accepter votre réponse si vous voulez –

Répondre

1

std::variant est une fonctionnalité incluse dans le prochain standard C++ 17 en cours de finalisation. Certains compilateurs prennent actuellement en charge cette fonctionnalité, mais c'est quelque chose que vous devez vérifier.

Si votre compilateur le supporte actuellement, vous pouvez le trouver dans l'espace de nommage std::experimental au lieu de directement dans std.