我创建了一个函子,它定义了自己的交换函数。为简单起见,假设函子的运算符签名是 int (int)。如果我用那个仿函数初始化两个 std::function,比如 std_func1 和 std_func2,交换它们会调用仿函数的用户实现的交换函数吗?提前致谢。
这是我尝试过的:
#include <iostream>
#include <vector>
#include <boost/function.hpp>
using namespace std;
class myclass {
public:
myclass(int n):data_(n,0){}
void swap(myclass& rhs) {
using std::swap;
std::cout << "swapping myclass" << '\n';
data_.swap(rhs.data_);
}
private:
vector<int> data_;
};
struct square {
square(int n):B(n){}
int operator()(int x) {
return x*x;
}
myclass B;
void swap(square& rhs) {
using std::swap;
std::cout << "swapping square" << '\n';
B.swap(rhs.B);
}
};
void swap(myclass& a, myclass& b) {
a.swap(b);
}
void swap(square& a, square& b) {
a.swap(b);
}
using myfunction = std::function<int (int)>;
int main () {
myfunction myf1(square(10));
myfunction myf2(square(20));
myf1.swap(myf2); /* does not use user-implemented swap functions */
return 0;
}