#c #templates #stl #containers
#c #шаблоны #stl #контейнеры
Вопрос:
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);
Хммм?
Комментарии:
1. Для чего? Почему такие странные требования?
Ответ №1:
Сложно объяснить, чего вы хотите достичь с помощью этого, но простой шаблон, как показано ниже, должен сделать свое дело:
template <typename T>
class Foo
{
Foo(std::vector<T> constamp; v)
{
// initialize from vector
}
Foo(std::list<T> constamp; l)
{
// initialize from list
}
};
...
std::vector<int> vec;
Foo<int> foo1(vec);
std::list<double> list;
Foo<double> foo2(list);
Комментарии:
1. Спасибо. Но мне нужно больше обобщений для неизвестных классов, таких как MyClass<тип> .
Ответ №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);
Комментарии:
1. Красиво и просто. Я доволен. Спасибо.
2. @sam: Может быть, вы могли бы прояснить свой вопрос, чтобы мы могли остановить вас от написания плохого кода…