2017-01-22 113 views
0

一般來說,我試圖使用std :: variant來創建一個聲明式的「聯合枚舉」類型,我需要在列表中描述一個位置(UITableView/UICollectionView et.al) 。swifty objective-C++ std :: variant

在斯威夫特這正是我需要做的:

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>我得到在XCode中出現variant file not found的編譯器錯誤。

任何方式來做到這一點?

+2

'std :: variant'是一個C++ 17功能,可能不支持您正在使用的編譯器。 –

+0

如果您願意,我會接受您的答案 –

回答

1

std::variant是即將出現的C++ 17標準中包含的一項功能,該標準正在定稿中。有些編譯器目前支持這個功能,但是你必須檢查它。

如果您的編譯器當前支持它,您可以在std::experimental名稱空間中找到它,而不是直接在std中找到它。

相關問題