Я пытаюсь построить мини-тестовую структуру. У меня есть одна функция, которая принимает две переменные типа List, которые состоят из одного типа, и я планирую использовать параметры шаблона шаблона как часть интерфейса. До сих пор у меня есть это,Как указать общую переменную шаблона с двумя параметрами шаблона шаблона?
template <typename C, template <class> class A, template <class> class B>
static inline void assertEquals(const A<C>& expected, const B<C>& actual) {
auto success = 0, failure = 0;
for (auto iter1 = expected.cbegin(), iter2 = actual.cbegin();
iter1 != expected.cend() && iter2 != actual.cend(); ++iter1, ++iter2) {
if (Test::assertEquals<C>(*iter1, *iter2)) {
++success;
} else {
++failure;
}
}
cout << "Success: " << success << endl
<< "Failure: " << failure << endl;
}
assertEquals
в если условие другая функция. Мой вопрос: правильно ли интерфейс? Во-вторых, как я буду использовать его? Я попытался это не дало никаких результатов,
Test::assertEquals<int, std::vector, std::vector>(haystack, needle);
Test::
просто класс, что функция находится в и haystack
и needle
имеют тип std::vector<int>
.
'станд :: вектор' фактически 'станд :: вектор '. –
Jarod42
Вам действительно нужно предоставить 'C' в' Test :: assertEquals '? можно ли это вывести из аргументов? (если да, 'assertEquals (const T1 & expected, const T2 & actual)' достаточно). –
Jarod42
@ Jarod42 Право. Означает ли это, что я не могу инициализировать его как 'std :: vector'? Я думал, что, поскольку 'Alloc' является функцией' T', я могу просто включить 'T'. Это, по-видимому, ключевая проблема в том, что я делаю неправильно, поскольку @TartanLlama также указал –
sguzman