J'ai
template <void (*T)(Entity *), typename Caller>
class Updater
{
public:
Updater(Caller c):m_caller(c){}
void process(Entity * e)
{
(m_caller->*T)(e); //Is this right?
}
private:
Caller m_caller;
};
Je comprends que je peux l'instancier comme
Foo f;
Updater<&Foo::Bar> updater(&f);
en supposant que Foo
a
void Foo::Bar(Entity *e);
Mais qu'en est-il si la méthode souhaitée est tempérée ? Comme ceci
template <typename T>
void Bar(T t);
Comment dois-je l'installer ? Comme ceci: ?
Foo f;
Updater<&Foo::Bar<Entity *>> updater(&f);
Lorsque je fais cela dans mon code réel, j'obtiens
invalid template argument for ..., expected compile-time constant expression
Deux questions donc :
1, est (m_caller->*T)(e);
correct ? Si ce n'est pas le cas, comment puis-je l'appeler ?
2, comment puis-je l'instancier ?