0

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 では任意の型をリストに渡すことができるため、なぜエラーが発生するのかわかりません。

boost::anyリスト内の適切な型にキャストするにはどうすればよいですか?

4

1 に答える 1

2

に変換できないため(またはなどの他のにstd::list<int>変換できないため)、エラーが発生します。std::list<boost::any>std::list<T>Tunsigned

手動で変換できます

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

あなたが求めているのは共変リスト型です。共変型 (型コンストラクター) は、Scala などの一部の言語に存在します。aCovT<X>が の共変でXありT、 のサブタイプである場合U(intのサブタイプなどany)、Cov<T>は のサブタイプですCov<U>。これは、Scala では、あなたのような例が機能することを意味します。

C++ では、共変型の言語サポートはありません。一部の型 ( などshared_ptr) は、ユーザー定義の変換 (変換コンストラクターなど) によって共分散を模倣します。ただし、std::listその中にはありません。これが、自分で変換を実行する必要がある理由です。

于 2012-09-28T12:04:50.960 に答える