Lassen Sie uns sagen, ich habe diese Funktion: (die so ziemlich eine Funktion im Container auf jeden Wert läuft, und dann liefert einen Vektor des Ergebnisses jeder Iteration)Wie kann const und nicht-const Typ ohne duplizierende Funktionen abgeleitet werden?
#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;
}
ich es so nicht nennen kann:
vector<int> vint = {1,2,3,4,5};
vmap([](auto &p) {return p++;},vint);
Da die parametrierte vector
const
ist, um sie geschehen ich erstellen müssen zwei vmap
, die nicht bekommen const
V
und eine, die const
ist.
Es fühlt sich zu sehr an, wenn mehrere Container/vector
an eine Funktion übergeben werden, weil es mich dazu bringt, 2^containers_count
Funktionen zu schreiben.
Gibt es irgendeine (-dirty but working) Lösung dafür?
Zur Erinnerung: Der Funktor muss nur auf "const" angewendet werden, wenn Sie einen Const-Container übergeben. [Beispiel] (http://coliru.stacked-crooked.com/a/858852c55432fb6c) –
@MilesBudnek: Messzeitpunkt – AndyG
Das ist ziemlich nah, aber wenn ich 'lvalue' übergebe, heißt es nicht, dass es ein schreibgeschütztes Objekt ist. – LyingOnTheSky