Die Ursache des Fehlers ist, dass es keinen geeigneten Zuweisungsoperator gibt. Der einzige Kandidat ist dies:
reference_wrapper& operator=(const reference_wrapper<T>& x);
A reference_wrapper
dient als Referenz mit Hilfe der impliziten Umwandlung Operatoren:
operator T&() const;
jedoch eine implizite Konvertierung wird nicht auf der linken Seite des Zuweisungsoperators passieren .
Wenn Sie diese Vorlage erwarten reference_wrapper
zu unterstützen, vielleicht können Sie in einer Weise, wie dies umgehen:
#include <functional>
#include <iostream>
template <class T>
T& get(T& value)
{
return value;
}
template <class T>
T& get(std::reference_wrapper<T>& w)
{
return w.get();
}
template<class T_>
void f(T_ obj)
{
//obj = 2;
get(obj) = 2;
}
int main()
{
int i = 1;
f(std::ref(i));
std::cout << i << '\n';
f(3.14); //at the same time, we want this also to work
}
Wie, warum reference_wrapper
nicht einen Zuweisungsoperator für gespeicherte Typen hat, nicht sicher. Die Boost-Version hat auch keine und sie sagen einfach, dass diese Klasse "den Funktionsschablonen normalerweise erlaubt, auf unmodifizierten Referenzen zu arbeiten". Schätze, das ist einfach keiner dieser Fälle.
Was ist 'ref'? Bitte poste ein komplettes, kompilierbares Programm. –
Dies ist nicht gültig C++ .. – Simone
-1 unvollständiger Code, undefined Begriffe, Behauptung der subjektiven Überzeugung über die undefinierte Sache –