I'm having trouble sending messages from a DLL's logging function to the client's logging function. I'm fine using a function pointer like this:
DLL:
class InnerLogger
{
public:
    static std::function<void(const std::string& message, int level)> loggerCallback;
    static std::stringstream logMsg;
    static int logSend(LogLevel logLevel);
};
void setLoggingFunction(const std::function<void(const std::string& message, int level)>& logFunction)
{
    InnerLogger::loggerCallback = logFunction;
}
Client:
void outerLogger(const std::string& message, int level)
{
  // display/save messages
}
main()
{
    std::function<void(const std::string& message, int level)> logFunctionPtr = outerLogger;
    setLoggingFunction(logFunctionPtr);
}
I can use InnerLogger::logSend and outerLogger picks it up.
But I'm doing something wrong when the 'outer' logger is a class member:
(DLL is unchanged)
Client:
class OuterLogger
{
public:
    OuterLogger();
    ~OuterLogger();
    void logFunction(const std::string& message, int level);
};
void OuterLogger::logFunction(const std::string& message, int level)
{
    // display/save messages
}
main()
{
    OuterLogger outerLogger;
    std::function<void(const std::string& message, int level)> logFunctionPtr = outerLogger.logFunction;
    setLoggingFunction(logFunctionPtr);
}
 
    