如何动态访问函数对象的目标
How to dynamically access target of function object
我有一个函数对象(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
你真的需要使用继承将测试变量放在函子中吗? 您可以像这样组合函子和测试变量:
struct math_operation
{
Tfunc f;
bool test;
};
std::vector<math_operation> v;
v.push_back( math_operation() );
v.push_back( math_operation() );
v[0].f = half();
v[1].f = square();
v[0].test = false;
v[1].test = true;
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数