Скажем, у меня есть эта функция: (что в значительной степени проходит функцию для каждого значения в контейнере, а затем возвращает вектор результата каждой итерации)Как вывести const и non-const тип без дублирующих функций?
#include <vector>
using std::vector;
template<class F, class V>
auto vmap(const F &f, const V &v) -> vector<decltype(f(v[0]))> {
vector<decltype(f(v[0]))> result;
result.reserve(v.size());
for (auto &p : v)
result.push_back(f(p));
return result;
}
Я не могу назвать это так:
vector<int> vint = {1,2,3,4,5};
vmap([](auto &p) {return p++;},vint);
Поскольку parametered vector
является const
, чтобы это произошло, мне придется создать два vmap
, которые получают не- const
V
и один, который const
.
Он начинает чувствовать себя слишком много, когда несколько контейнеров/vector
с переданы функции, потому что это заставляет меня писать функции 2^containers_count
.
Есть ли какие-либо (-ногие, но рабочие) решения для этого?
Re your note: Функтор должен быть применим только к 'const', если вы передадите контейнер' const'. [Пример] (http://coliru.stacked-crooked.com/a/858852c55432fb6c) –
@MilesBudnek: справедливая точка – AndyG
Это довольно близко, но когда я передаю 'lvalue', он не говорит, что это объект только для чтения. – LyingOnTheSky