¿Cómo asegurar que cada método de una clase llame primero a algún otro método?

Yo tengo :

class Foo {
   public:
      void log() { }

      void a() {
         log();
      }

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

¿Hay alguna manera de que pueda tener cada método deFoo, llamadalog(), pero sin que tenga que escribir explícitamente log () como la primera línea de cada función? Quiero hacer esto, para poder agregar comportamiento a cada función sin tener que pasar por cada función y asegurarme de que se realice la llamada, y también para que cuando agregue nuevas funciones, el código se agregue automáticamente ...

¿Es esto posible? No puedo imaginar cómo hacer esto con las macros, así que no estoy seguro de por dónde empezar ... La única forma en que he pensado hasta ahora es agregar un "paso previo a la compilación", de modo que antes de compilar escanee el archivo y edite el código fuente, pero eso no parece muy inteligente ...

EDITAR: Solo para aclarar: no quiero que log () se llame a sí mismo obviamente. No necesita ser parte de la clase.

EDITAR: Preferiría usar métodos que funcionen multiplataforma y usar solo el stl.

Respuestas a la pregunta(6)

Su respuesta a la pregunta