Передайте посилання функції на структуру усередині цієї функції

Є який-небудь складний код, і я застряг на твір.

У мене є функція, яка походить від віртуального базового класу.

Всередині ця функція є функтором. Функтор повинен мати доступ до всіх об'єктів усередині цієї функції та його батьківського класу. Але при передачі посилання на "це" або на назву функції я отримую помилку.

Причиною всього цього ускладнення є прискорення коду. Алгоритм, який я кодую, дійсно має лише одну дорогу частину. Я маю намір паралізувати цю частину. Проте цей крок накопичується над двома значеннями одночасно, через кілька кроків. Отже, мені потрібно перевизначити деяких операторів. Функтор здавався найпростішим способом реалізувати це.

Чи може хто-небудь запропонувати, як це вирішити?

репрезентативний код нижче:

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 {

        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
Які помилки ви отримуєте?
додано Автор crazyjul, джерело

1 Відповіді

Основна проблема тут - передчасна оптимізація .

Technically, replace the current …

int functionA(int a, int b){

with …

int myClassB::functionA(int a, int b){

і, принаймні, проблеми з цим мають бути зниклими.

Then, not that placing a reference as a data member, like your …

myClassA& myClassA;

makes instances non-assignable. And a functor object “should” be assignable. So if you decide to go on with this, perhaps better replace that with …

myClassA* pMyClassA_;

і відповідно змінити ініціалізацію.

Cheers & hth.,

1
додано
На жаль, я зробив помилку на моєму посту в 3 ранку минулого вечора. Реальний код робить мають myClassB :: functionA (int a, int b)
додано Автор Noah, джерело
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147