Como garantir que todo método de uma classe chame outro método primeiro?

Eu tenho :

class Foo {
   public:
      void log() { }

      void a() {
         log();
      }

      void b() {
         log();
      }
};

Existe uma maneira que eu possa ter cada método deFoo, ligarlog(), mas sem eu precisar digitar explicitamente log () como a primeira linha de cada função? Quero fazer isso, para que eu possa adicionar comportamento a cada função sem ter que passar por cada função e garantir que a chamada seja feita, e também para que quando eu adicionar novas funções, o código seja adicionado automaticamente ...

Isso é possível? Não consigo imaginar como fazer isso com as macros, por isso não tenho certeza por onde começar ... A única maneira que pensei até agora é adicionar uma "etapa de pré-construção", para que, antes de compilar, verifique o arquivo e edite o código fonte, mas isso não parece muito inteligente ...

Edição: Apenas para esclarecer - eu não quero log () para chamar-se obviamente. Não precisa fazer parte da aula.

EDIT: Eu preferiria usar métodos que funcionassem em várias plataformas e usando apenas o stl.

questionAnswers(6)

yourAnswerToTheQuestion