2011-04-19 85 views
0
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); 

嗯?模板和STL容器

+0

什么:

在此之前,如果你这样做你的程序将编译就好了?为什么要求奇怪? – GManNickG 2011-04-19 21:45:10

回答

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); 
+0

不错,简单。我很满意。谢谢。 – anagamin 2011-04-19 21:57:44

+1

@sam:也许你可以澄清你的问题,这样我们就可以阻止你编写错误的代码... – GManNickG 2011-04-19 22:00:42

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); 
+0

谢谢。但是我需要对MyClass 等未知类进行更多的泛化。 – anagamin 2011-04-19 21:53:17