próbuję umieścić idiom kopiowaniem i swap do wielokrotnego użytku wstawek:ponowne idiom kopiowaniem i-swap
template<typename Derived>
struct copy_and_swap
{
Derived& operator=(Derived copy)
{
Derived* derived = static_cast<Derived*>(this);
derived->swap(copy);
return *derived;
}
};
zamierzam go mieszać w CRTP poprzez:
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";
}
};
jednak proste badanie pokazuje, że to nie działa:
Foo x;
Foo y;
x = y;
ten drukuje tylko „default” dwa razy, ale ani „kopia”, ani „wymiany” jest drukowana. Czego tu mi brakuje?
Może kompilator dostarcza własną wersję 'operatora =' skoro jesteś brakuje jednego w klasie 'Foo'? Być może będziesz musiał zrobić 'Foo :: operator =() {return copy_and_swap();}' (pseudokod)? – RedX