¿Se puede degradar la expresión de Lambda a C ++ 98?

Recientemente tuve un problema al integrar el código C ++ 11 escrito con la expresión lambda a la base de código anterior que solo admite el compilador C ++ 98. Descubrí un par de posibles equivalencias de lambda como Macro, functor o puntero de función. Pero parece que todos son limitados al traducir lambda con captura. Por ejemplo, una función genérica simple con devolución de llamada:

template <class Fn>  
void ForEachObject(Fn fn)  
{  
    for (uint i = 0; i < objectCount; i++)  
    {  
        fn(i, address + i * objectSize);  
    }  
}

y la persona que llama típica hará algo como:

uint attributes = 0x0030;
....
ForEachObject([=](uint index, void * objectAddress)
{
    if ((ObjectInfo(index) & attributes) != 0)
    {
        fn(index, objectAddress);
    }
});

Los atributos de nota aquí provienen del alcance de lambda. ¿Hay alguna forma de reutilizar todavía para cada lógica sin lambda? ¿O debo volver a escribir la lógica en cada una de esas llamadas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta