2012-09-28 249 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

相关问题