Я пытаюсь написать функцию, которая примерно похожа на функцию, которая принимает два экземпляра контейнеров (скажем, пока они одинаковые), содержит один и тот же тип и объединяет их.Итак, вот моя функция для векторов:
template<typename T>
void test(std::vector<T> v1, std::vector<T> v2) {
std::cout << "called nested for c\n";
}
, и она работает.
Теперь я хочу иметь функцию, которая будет работать для множеств или векторов.И я пытаюсь это:
template<typename T, template <typename> typename C >
void test(C<T> v1, C<T> v2) {
std::cout << "called nested for c<t>\n";
}
и получить
nestedt.cc: 33: 6: note: сбой вывода / замены аргумента шаблона: nestedt.cc:43:12:ошибка: неверное количество аргументов шаблона (3, должно быть 1) test (s, s);^ nestedt.cc:32:51: примечание: предоставляется для 'шаблона класса C' имя шаблона C> ^
Я пытаюсь
template< template <typename T> typename C >
void test(C<T> v1, C<T> v2) {}
std::set<int> s = {1,2};
test(s, s);
, и это не работает:
nestedt.cc: 32: 6: примечание: сбой вывода / замены аргумента шаблона: nestedt.cc:42:12: примечание: невозможно преобразовать 's' (тип 'std :: set')набрать 'int' test (s, s);^
Поэтому я пытаюсь
template<typename C, typename T >
void test(C<T> v1, C<T> v2) {}
и получаю
nestedt.cc: 32: 6: note :андидат: шаблон void test (C, C) void test (C v1, C v2) {^ nestedt.cc:32:6: note: сбой вывода / замены аргумента шаблона: nestedt.cc:42:12: note: не удалось вывести параметр шаблона 'T'тест (ы, с);^
Мне кажется, я даже близко не понимаю, как на самом деле работают шаблоны в C ++, и это так грустно.Также на самом деле я хочу, чтобы контейнеры были другими.И в идеале быть в состоянии как-то указать ограниченный набор разрешенных контейнеров.И они на самом деле не являются std :: Containers.
Обратите внимание, что конечная цель состоит в том, чтобы иметь возможность взять 2 разных контейнера, что-то вроде test(vector<int>, set<int>)
.И модификация контейнеров вроде невозможна.