2014-02-07 80 views
3

我有一個這樣的情況:C++:枚舉類型作爲模板參數 - 全球範圍內

template<typename myEnumType> 
int foo(const myEnumType & shortest_paths_algorithm) 
{ 
    ... 
} 

int main() 
{ 
    myEnumType enum_type_istance; 
    int a = foo(enum_type_istance) 
} 

,如果我在函數聲明之前的一切聲明

typedef enum {AAA, BBB} myEnumType; 

是確定的。雖然,如果我寫創建enum_type_istance變量之前,上面的線,得到錯誤

沒有匹配函數調用「富(主():: myEnumType &)」 候選人是:模板INT FOO(常量myEnumType &)

爲什麼?我怎麼能在main中定義type? 謝謝!

+2

使用本地類型作爲模板類型參數是一個C++ 11功能。確保你的編譯器支持它,並且你正在使用C++ 11模式(如果可能的話)。 [代碼正在工作,現場示例](http://coliru.stacked-crooked.com/a/beea71d10a306b08) – dyp

+1

(順便說一句,我知道沒有理由你不應該只使用'enum myEnumType {AAA,BBB};'在C++中) – dyp

+0

但爲什麼如果我寫'typedef int myEnumType;'那麼它也適用,如果我寫在main()中? 'int'和'enum'有什麼區別? – user1403546

回答

4

您在C++ 11之前使用C++,它不允許在模板參數中使用「本地」類型。幸運的是,這個特性已經在C++ 11中引入了。由於you can see它與-std=c++11標誌編譯得很好,而it fails沒有。