Foo::copy(src).to(dst);

CopyOperation::CopyOperation(Foo *src) : src(src) {}
void CopyOperation::to(Foo *dst) {
src->value = dst->value; // copy
}
CopyOperation &Foo::copy(Foo *src) {
return CopyOperation(src);
}

こういうのどう?