5

さまざまなタイプを判別するために特定のコンテナーを内部的に使用するジェネリッククラステンプレートを作成したいと思います。このようなもの:

#include <vector>
#include <list>
template< typename F, template< class ... > class container_type = std::vector >
struct C
{
    C();
    template< typename U >
    C(container_type< U >);
    C(container_type< F >);
    C(container_type< int >);
    container_type< double > param;
};
C< unsigned, std::list > c;

これを行う最も自然な方法は何ですか?たとえば、コンテナのアロケータの存在について何らかの形で言及したいかどうか。

4

1 に答える 1

5

このようなもの?

template< typename F, template<class T, class = std::allocator<T> > class container_type = std::vector >
struct C
{
    C() {}
    template< typename U >
    C(container_type< U >) {}
    C(container_type< F >) {}
    C(container_type< int >) {}

    container_type< double > param;
};

C< unsigned, std::list > c;

編集:

std::queue同様ですが、内部で使用されるコンテナのタイプによってパラメータ化される、少し単純なアプローチが使用されます。うまくいけば、これはこのアプローチが非常に自然であることを証明します。上記のサンプルはVC++10でテストされており、アロケータの扱い方を示しています。

于 2013-01-21T12:01:10.257 に答える