Я делаю некоторые численные симуляции, где приятно перегрузить операции над векторами (аналогично valarrays). Например, я могу написать
template <typename T>
vector<T> operator*(const vector<T>& A, const vector<T>& B){
//blah blah
}
Но что, если я хочу обобщить этот шаблон так, чтобы он действовал на два разных типа векторов и (потенциально) возвращал третий тип? То есть Я хочу написать
template <typename T, template U, template V>
vector<V> operator*(const vector<T>& A, const vector<U>& B){
//blah blah
}
Теперь вышесказанное действительно работает, если я использую оператор в ситуации "A * B", где A и B являются разными типами и возвращают другой отдельный тип. Однако, если A и B имеют одинаковый тип, это не работает. Конечно, я мог бы определить разные шаблоны для каждой комбинации (т.е. только T, или только T и U, или T, U и V), но это кажется уродливым. Есть ли способ, которым я могу использовать одно шаблонное выражение для разновидностей T, U и V, приведенное выше, и заставить его работать, даже если «A», «B» и «A * B» все одинаковые типы (или имеют только 2 разных типа?)