Ponteiros de função Callback C ++ com / sem classes

Eu fiquei preso. Eu estou tentando formar uma função que coma ponteiros de função sem classe e os de objetos. Aqui está o meu código atual que, com sorte, explica mais.

(Ele deve ser executado em um Arduino, portanto não posso usar grandes bibliotecas.)

Primeiro, estou usando esta biblioteca para o Arduino:

/* SimpleTimer - A timer library for Arduino.
 * Author: [email protected]
 * Copyright (c) 2010 OTTOTECNICA Italy
 */

Que aceita funções que chama em um intervalo de timer definido deste tipo:

typedef void (*timer_callback)(void);

No que diz respeito ao meu conhecimento, é uma função classles, a página da web Ponteiros para funções membro me levou muito longe, mas não longe o suficiente. Provavelmente um déficit de terminologia do meu lad

Agora, criei minha própria classe que, por sua vez, gostaria de usar esta biblioteca SimpleTimer. Mas se eu alimentar o SimpleTimer, minha classe funciona, ele não gosta deles (o que eu entendo). Mas como seria possível fazer isso acontecer sem alterar a biblioteca SimpleTime

Então existe a classe Robot, que temRobot::halt(). Quero que o robô avance por um determinado período de tempo. Igual a

void Robot::forward(int speed, long time) {
    reset();
    timer.setTimer(time, c_func, 1);

    analogWrite(l_a, speed);
    analogWrite(r_a, speed);
    isMoving(true);
}

void Robot::halt() {
    __isMoving = false;
    digitalWrite(r_a, LOW);
    digitalWrite(r_b, LOW);
    digitalWrite(l_b, LOW);
    digitalWrite(l_a, LOW);
}

A variável c_func é uma função sem classe neste momento, mas eu gostaria de usar oRobot::halt função. Eu olhei, li, aprendi, mas ainda não consegui. Parece que não consigo entender meu porque estou perdendo algum ângul

Eu tentei

timer.setTimer(time, (this->*halt), 1);
timer.setTimer(time, Robot::*halt, 1);
timer.setTimer(time, &Robot::halt), 1);

Mas tudo isso equivaleria ao mesmo problema / eu apenas esfaqueando aqui no escuro ...

EDITA

Antes, eu disse que não queria mudar o código da biblioteca SimpleTimer. Quero voltar a este, acho que alterá-lo, seria a melhor opçã

Obrigado por todas as respostas atuais, eu só estava autorizado a sinalizar uma como uma resposta viável, na verdade tudo o que li aqui foi extremamente úti

Para continuar, altere o código do SimpleTimer. Essa classe precisa ter uma referência ao objeto que contém minha função "parar", certo? Então, sobrecarregar a função settimer para algo que leva meu objeto e minha função como dois ponteiros separados funcionaria ...? Acho que estou pegando o jeito, mas ainda não estou lá com a cabeç

EDITA

Eu não sei quem veio com este novamente, mas, alguém encontrando esta discussão. Se encontradoonteiros de função de membro e os delegados C ++ mais rápidos possíve para dar uma introdução muito agradável aos ponteiros de função e ponteiros de função de membr

EDITA

Fique funcionando, alterou a biblioteca SimpleTimer para usar este sistema Delegado:http: //www.codeproject.com/KB/cpp/FastDelegate.asp

Integrou-se muito bem e pode ser bom ter um sistema Delegado padrão como este na biblioteca do Arduin

Code como no teste (trabalhando)

typedef

typedef FastDelegate0<> FuncDelegate;

Code na classe do robô:

void Robot::test(){
    FuncDelegate f_delegate;
    f_delegate = MakeDelegate(this, &Robot::halt);

    timer.setTimerDelg(1, f_delegate, 1);
}

void Robot::halt() {
    Serial.println("TEST");
}

Code na classe SimpleTimer:

int SimpleTimer::setTimerDelg(long d, FuncDelegate f, int n){
    f();
}

@Arduino imprime TEST no consol

Próximo passo, colocando-o em uma matriz, não vejo muitos problemas por lá. Obrigado a todos, não acredito no que aprendi em dois dias.

Que cheiro é esse? Esse é o cheiro de ...? Sucesso

Para os interessados, o sistema Delegado usado não representa problemas de capacidade de memória: Com o FastDelegate

AVR Memory Usage
----------------
Device: atmega2560

Program:   17178 bytes (6.6% Full)
(.text + .data + .bootloader)

Data:       1292 bytes (15.8% Full)
(.data + .bss + .noinit)


Finished building: sizedummy

Sem FastDelegate:

AVR Memory Usage
----------------
Device: atmega2560

Program:   17030 bytes (6.5% Full)
(.text + .data + .bootloader)

Data:       1292 bytes (15.8% Full)
(.data + .bss + .noinit)


Finished building: sizedummy

questionAnswers(4)

yourAnswerToTheQuestion