【发布时间】:2011-10-28 03:38:27
【问题描述】:
我正在尝试将复制和交换习语放入可重用的 mixin:
template<typename Derived>
struct copy_and_swap
{
Derived& operator=(Derived copy)
{
Derived* derived = static_cast<Derived*>(this);
derived->swap(copy);
return *derived;
}
};
我打算通过 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";
}
};
但是,一个简单的测试表明它不起作用:
Foo x;
Foo y;
x = y;
这只会打印两次“default”,既不打印“copy”也不打印“swap”。我在这里错过了什么?
【问题讨论】:
-
也许编译器提供了他自己的
operator=版本,因为你的Foo类中缺少一个?也许你必须做Foo::operator=(){return copy_and_swap();}(伪代码)?
标签: c++ assignment-operator mixins crtp copy-and-swap