samedi 16 mai 2015

Get address of a function which has variadic templates in C++11

When saving the address of a function with a variadic template, the g++ compiler (Version 4.8.2) outputs this error:

address of overloaded function with no contextual type information

The code in question:

template<typename... Args>
void redirect_function(const char *format, Args... args)
{
    pLog->Write(format, args...); // or: printf(format, args...);
}

void *fnPtr = (void *)&redirect_function; // The error occurs here.

Here is what I do with this somewhere else:

typedef void (*log_bridge)(const char*, ...);
log_bridge LogWrite;
LogWrite = (log_bridge)fnPtr;

I have no other possibility to this so please don't suggest completely different ways of solving this.

Aucun commentaire:

Enregistrer un commentaire