Дано:Переходя зЬй :: вектора для любого типа функции
template<typename T> class A {
B b;
std::vector<T> vec1;
std::vector<T> vec2;
}
я хотел B иметь функцию-член, заполняющую(), который принимает ссылку на те векторы и заполняющую vec2 со значениями T в зависимости от некоторой информации, содержащейся в b.
Один из способов сделать это перегружает заполнения() для каждого возможного аргумента Т:
fill(const std::vector<float>& a, std::vector<float>& b)
и так далее, но это будет означать, много ненужного дублирования в операции одинаковы для всех возможных Т. Внутри из fill() Я мог бы использовать vector :: value_type для вычислений, но я не знаю, как объявить его таким образом, что он принимает каждый тип std :: vector. Очевидным способом было бы использовать свободную функцию с шаблонами. Есть ли более простой способ сделать это?
Дополнительная информация: B является частью иерархии наследования с чистыми виртуальными функциями и завернута в умный указатель на базовый класс. Пользователи должны будут создавать экземпляр B с тем же типом, что и A (что добавляет вероятность ошибки) и не будет очевидным для пользователей классов, поэтому я бы предпочел избежать этого. – pmr
Я понимаю, что реорганизация больших иерархий - это боль, но вы можете также попробовать использовать класс политики в качестве параметра шаблона вместо передачи в интеллектуальных указателях и, по-видимому (на основе вашего описания), жертвуя безопасностью типов для гибкости. –