Придумал хитрый код, и я застрял на нем.
У меня есть функция, производная от виртуального базового класса.
Внутри этой функции находится функтор. Функтору необходимо иметь доступ ко всем объектам внутри этой функции и ее родительского класса. Но при передаче ссылки на «это» или на имя функции я получаю сообщение об ошибке.
Причина всей этой сложности - ускорение кода. В алгоритме, который я кодирую, есть только одна дорогостоящая часть. Я намерен распараллелить эту часть. Однако этот шаг накапливает более двух значений одновременно за несколько шагов. Итак, мне нужно переопределить некоторые операторы. Функтор казался самым простым способом реализовать это.
Может ли кто-нибудь подсказать, как это решить.
представительный код ниже:
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) );
}