模板和STL容器

时间:2011-04-19 21:37:32

标签: c++ templates stl containers

template<typename T>
    class Foo {
        template<???>
        Foo(Container<T> c) {
        }
    };
...
//this can't be changed
std::vector<int> vec;
Foo<int> foo1(vec);
std::list<double> list;
Foo<double> foo2(list);

嗯?

2 个答案:

答案 0 :(得分:3)

很难说出你想要实现的目标,但下面的简单模板应该可以解决这个问题:

template <typename T>
class Foo 
{
    Foo(std::vector<T> const& v) 
    {
        // initialize from vector
    }
    Foo(std::list<T> const& l) 
    {
        // initialize from list
    }
};

...

std::vector<int> vec;
Foo<int> foo1(vec);
std::list<double> list;
Foo<double> foo2(list);

答案 1 :(得分:2)

我一点也不清楚你要求的是什么。我认为您可能需要将您的问题编辑为更具体,更完整。

在此之前,如果您执行此操作,您的程序将编译正常:

#include <vector>
#include <list>

template <typename T>
    class Foo {
    public:
        template<typename T1>
        Foo(T1 c) {
        }
    };

std::vector<int> vec;
Foo<int> foo1(vec);

std::list<double> list;
Foo<double> foo2(list);