有一些棘手的代码,我被困在一块。
我有一个来自虚拟基类的函数。
在该函数内部是一个仿函数。仿函数需要能够访问此函数及其父类中的所有对象。但是,当传递对“this”或函数名称的引用时,我收到错误。
所有这些复杂化的原因是加速代码。我编码的算法实际上只有一个昂贵的部分。我的意图是并行化该部分。但是,该步骤通过几个步骤同时累积两个值。所以,我需要覆盖一些运算符。仿函数似乎是实现这一目标的最简单方法。
任何人都可以建议如何解决这个问题。
以下代表性代码:
myClassA Glm{
public:
virtual int functionA(int a, int b)=0;
}
class myClassB : public myClassA {
public:
virtual int functionA(int a, int b);
}
int functionA(int a, int b){
// do some stuff
struct MyFunctor : public binary_function<Fraction, DoubleIterator, Fraction> {
MyFunctor(myClassA& in_class, int A) : myClassA(in_class), column(iColumn) {
}
myClassA& myClassA;
int A;
Fraction operator()(double B, int A, ) {
double C = doFancyStuff(A,B);
return C;
}
}
//use stl to accumulate
accumulate(data.begin(), data.end(), temp, MyFunctor(*this, column) );
}
答案 0 :(得分:1)
这里的主要问题是过早优化。
从技术上讲,替换当前......
int functionA(int a, int b){
与......
int myClassB::functionA(int a, int b){
至少你this
的问题应该消失。
然后,不要把引用作为数据成员,就像你的......
myClassA& myClassA;
使实例不可分配。并且一个仿函数对象“应该”可以分配。因此,如果您决定继续这样做,也许最好用...替换它。
myClassA* pMyClassA_;
并相应地更改初始化。
干杯&amp;第h。,