Шаблоны и контейнеры STL

#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: Может быть, вы могли бы прояснить свой вопрос, чтобы мы могли остановить вас от написания плохого кода…