bon je m'en suis sorti avec un champ void *priv dans la structure de données associée à l'algo, que je charge avec l'instance de classe qui m'intéresse.
sinon
int SimulationModel::vctlPeriph(int cmd, int value)
{
switch(cmd) {
...
}
/*static*/ int SimulationModel::sctlPeriph(struct algo_data *data, int cmd, int value) {
int v=static_cast<SimulationModel*>(data->priv)->vctlPeriph(cmd,value);
...
}
rah ça fait du code ultra geek le c++

sinon je suppose que static_cast est très con:
template <typename T> T static_cast(void *value) { return (T)value};
ou un truc comme ça, je connais pas la syntaxe