que estoy tratando de poner el idioma de copiar y de intercambio en un mixin reutilizable:reutilizar el idioma de copiar y de intercambio
template<typename Derived>
struct copy_and_swap
{
Derived& operator=(Derived copy)
{
Derived* derived = static_cast<Derived*>(this);
derived->swap(copy);
return *derived;
}
};
pretendo que pueda ser mezclado en medio de CRTP:
struct Foo : copy_and_swap<Foo>
{
Foo()
{
std::cout << "default\n";
}
Foo(const Foo& other)
{
std::cout << "copy\n";
}
void swap(Foo& other)
{
std::cout << "swap\n";
}
};
sin embargo, una prueba simple muestra que no está funcionando:
Foo x;
Foo y;
x = y;
Este "defecto" sólo se imprime dos veces, ni se imprime "copia" ni "intercambio". ¿Que me estoy perdiendo aqui?
Tal vez el compilador está proporcionando su propia versión de 'operador =' ya que eres falta uno en tu clase 'Foo'? Tal vez tengas que hacer 'Foo :: operator =() {return copy_and_swap();}' (pseudocode)? – RedX