#include <iostream>
struct A {
explicit A(int a) : _a(a) {};
int _a;
};
struct ClassFunction {
ClassFunction(std::shared_ptr<A> myA) : _myA(myA) {}
double operator() (int &x,
int &g) {
return 1.0
+ static_cast<double>(_myA->_a); // offending line
}
static double wrap(int x, int g, void *data) {
return (*reinterpret_cast<ClassFunction*>(data)) (x,g);
}
std::shared_ptr<A> _myA;
};
int main() {
int x = 1;
int g;
auto myA = std::shared_ptr<A>(new A(int(20)));
ClassFunction myClassFunction(myA);
std::cout << ClassFunction::wrap(x,g,NULL) << std::endl;
return 0;
}
我正在尝试创建一个ClassFunction
将 astd::shared_ptr<A>
作为参数的函数对象类,然后我通过static
成员 function调用它ClassFunction::wrap
。
如果我访问数据成员,A
因为myA->_a
程序无法运行(但是,它确实编译而没有任何抱怨)。
我如何使这项工作?
请尝试以下操作:
std::cout << ClassFunction::wrap(x, g, &myClassFunction) << std::endl;
reinterpret_cast<ClassFunction*>(data) 当数据指向 ClassFunction 类的实例时适用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句