2012-09-28 101 views
0

我試圖將boost::any對象的列表傳遞給函數。將std :: list <boost::any>作爲參數傳遞給函數

這裏是我的嘗試:

typedef std::list<boost::any> Any_List_Type; 
typedef std::list<int> Int_List_Type; 

void printAnyListSize(Any_List_Type anyListType) 
{ 
    printf("Any list size(%d) \n", anyListType.size(); 
    return; 
} 

void showInstListSize(Int_List_Type intListType) 
{ 
    printAnyListSize(intListType); //compile error... 
} 

由於升壓::任何允許任何類型列表中的傳遞,我不知道爲什麼會出現錯誤。

如何在列表中鍵入將boost::any轉換爲適當的類型?

+0

什麼是錯誤信息? – BoBTFish

回答

2

該錯誤是因爲存在是std::list<int>不轉換爲std::list<boost::any>(或std::list<T>與任何其他T,如unsigned)。

您可以將它手動

printAnyListSize(Any_List_Type(intListType.begin(), intListType.end())); 

你所要求的是一個協變列表類型。協變類型(類型構造函數)以某些語言存在,如Scala;如果CovT<X>是在XT協變是U(如int將是any一個子類型)的子類型,則Cov<T>Cov<U>的子類型。這意味着在Scala中,類似於你的例子將會起作用。

在C++中,沒有對協變類型的語言支持。某些類型(如shared_ptr)通過用戶定義的轉換(例如轉換構造函數)來模擬協方差。但是,std::list不在其中。這就是您必須自己執行轉換的原因。

+0

好的。這就說得通了。非常感謝。 – user1690041

相關問題