История изменений
Исправление monk, (текущая версия) :
Это называется std::random_access_iterator
Так всё равно нужны границы.
И если так делать, тогда уже код всей функции становится шаблоном. То есть, можно, конечно, писать функции в стиле «всё в заголовочном файле». Типа
template <typename T>
T & f(T v)
{
n = v.size();
...
auto r = g(get<0>(v[i]), get<0>(v[j]))
...
}
И будет работать с любым типом, у которого есть size()
, оператор []
и результат этого оператора достаточно похож на кортеж.
Но тогда эту штуку не упаковать в разделяемую библиотеку.
Исходная версия monk, :
Это называется std::random_access_iterator
Так всё равно нужны границы.
И если так делать, тогда уже код всей функции становится шаблоном. То есть, можно, конечно, писать функции в стиле «всё в заголовочном файле». Типа
template <typename T>
T & f(T v)
{
n = v.size();
...
auto r = g(get<0>(v[i]), get<0>(v[j]))
...
}
И будет работать с любым типом, у которого есть size()
, оператор ‘[]’ и результат этого оператора достаточно похож на кортеж.
Но тогда эту штуку не упаковать в разделяемую библиотеку.