Это описание Vector of pairs with generic vector and pair type, template of template.Stxxl Vector as dropin replacement for std :: vector
Я хотел был бы иметь возможность вызвать метод с std::vector
или stxxl:vector
, в то время как аргументы шаблона vector
(Пара x, y) указаны.
В частности, метод signatrue может выглядеть следующим образом:
template<typename t_x, typename t_y,
template<typename, typename> class t_pair,
template<typename...> class t_vector>
method(t_vector<t_pair<t_x,t_y>> &v)
К сожалению, при указании подписи, как это, это не представляется возможным пропускать stxxl:vector
в t_vector
. Это приводит к следующей ошибке компиляции:
sad.hpp:128:5: note: template argument deduction/substitution failed:
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
method(coordinates);
^
program.cpp:104:52: error: expected a type, got ‘4u’
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
program.cpp:104:52: error: expected a type, got ‘2097152u’
Вопрос заключается в том, как изменить сигнатуру методы для того, чтобы иметь возможность использовать stxxl::vector
как дроп-ин для замены существующего кода с использованием std::vector
?
Обновление о том, почему я использую вложенные шаблоны для вектора: Возможно, я ошибаюсь, но мне бы хотелось, чтобы компилятор задавал переменные в вышеупомянутом методе.
Я, например, строящему vector
или queue
std::vector<t_x> intervals(k * k + 1);
typedef std::tuple<std::pair<t_x,t_y>,std::pair<t_x,t_y>, std::pair<t_x,t_y>, uint> t_queue;
std::queue <t_queue> queue;
Какой должна быть либо uint32_t or uint64_t
в зависимости от типа кастрированный баран из пары-элементов uint32_t or uint64_t
Зачем вам нужно указывать параметры шаблона? Почему бы просто не использовать простое 'typename t_vector' без всех остальных параметров? Наличие параметра шаблона шаблона полезно, если вы собираетесь использовать этот параметр шаблона для построения различного типа, но в вашем случае вы используете его только с одним типом, который является 't_pair'. – Holt
Я использую uint32_t и uint64_t как параметр шаблона пары. Поэтому я использую t_x/t_y в своем коде, чтобы решить, должны ли использоваться биты 32/64 бит. –
Я действительно не понимаю, почему шаблон, как вы делаете против простой формы, поможет вам в этом? Не могли бы вы обновить свой вопрос, чтобы показать нам, почему вам нужно иметь такие параметры шаблона (и почему более простая форма не работает для вас)? – Holt