我有一个函数对象向量 ( std::function
),它们都派生自一个公共基类 ,base
如下所示。在对向量进行迭代时,我想访问并可能更改目标中的变量——例如test
。在编译时,std::function::target()
可以返回一个指向原始目标的指针,但有没有办法在运行时做到这一点——即动态访问test
?函子向量可以由任意数量的不同目标函数组成。Boost 不是此代码库的选项。
#include <iostream>
#include <functional>
#include <vector>
typedef std::function<double(double)> Tfunc;
struct base { bool test; };
struct half : public base {
template<typename T> T operator()(T x) { return x*0.5; }
};
struct square : public base {
template<typename T> T operator()(T x) { return x*x; }
};
int main() {
std::vector<Tfunc> v;
v.push_back( half() );
v.push_back( square() );
v[0].target<half>()->test=false;
v[1].target<square>()->test=true;
for (auto &f : v)
std::cout << f(2.0) << " " << f.target_type().name() << "\n";
return 0;
}
输出:
1 4half
4 6square