我有一个来自另一个类的函数,而另一个类又来自虚拟基类。
在该函数内部是一个仿函数。仿函数需要能够访问此函数及其父类中的所有对象。但是,当传递对“this”或函数名称的引用时,我收到错误。
所有这些复杂化的原因是加速代码。我编码的算法实际上只有一个昂贵的部分。我的意图是并行化该部分。但是,该步骤通过几个步骤同时累积超过两个值。所以,我需要覆盖一些运算符。仿函数似乎是实现这一目标的最简单方法。
仿函数需要能够访问myClassA和myClassB中的对象,因此我需要使用对myClassB的引用来构造它。 (由于B从A下降,因此所有都应该是可访问的。)
问题在于,当我尝试将仿函数传递到累积行时,我得到关于没有匹配函数的错误。我试过“这个”,“* this”,“myClassA”,“myClassB”等等。
任何想法??
class myBaseClass {
public:
virtual double doFancyStuff(double a, double b)=0;
virtual double doOtherFancyStuff(double a, double b)=0;
}
class myClassA : public myBaseClass { // B inherits a bunch of stuff from myClassA
public:
double doFancyStuff(double a, double b){
double C = pow(a,b); //dummy action, is actually a lot of fancy math here
return C;
}
virtual double doOtherFancyStuff(double a, double b)=0;
}
class myClassB : public myClassA { // B inherits a bunch of stuff from myClassA
public:
double doOtherFancyStuff(double a, double b){
return pow(a * b, 3); //dummy action, is actually a lot of fancy math here
}
double doMoreFancyStuff(double a, double b){
// do some stuff
struct MyFunctor : public binary_function<Fraction, DoubleIterator, Fraction> {
MyFunctor(myClassB& in_class, doubleA) : myClassA(in_class), column(iColumn) {} // Note: constructed with reference to myClassB, so it can access all the objects (functions, data) in myClassB
myClassB& myClassB;
doubleA;
double B = 123.456;
double operator()(double B, double A, ) {
double C = doFancyStuff(A,B);
C += doOtherFancyStuff(A,B,C);
return C;
}
}
A = 1234 // actually result of some other work in the real code.
//use stl to accumulate
accumulate(data.begin(), data.end(), temp, MyFunctor(this, A) ); //Passing 'this' here so that functor gets a reference to myClassB
}
答案 0 :(得分:0)
您应该将函数移到函数外部。
未实现全新C ++ 11标准的编译器不允许使用本地类实例化accumulate
之类的模板。