Estoy tratando de simplificar un grupo de archivos de encabezado "include spaghetti" mediante el uso de declaraciones forward y #includes en movimiento en el archivo de implementación. Sin embargo, sigo viniendo sobre el siguiente escenario:Reenviar declarar el typedef público de una clase en C++
//Foo.h
#include "Bar.h"
class Foo
{
public:
void someMethod(Bar::someType_t &val);
};
//Bar.h
.
.
.
class Bar
{
public:
typedef std::vector<SomeClass> someType_t;
};
Quiero eliminar #include "Bar.h" en el mayor número posible de casos. También veo la situación en la que el typedef en Bar.h aparece en la lista fuera de la clase Bar. Supongo que ambas situaciones se pueden abordar de la misma manera.
¿Alguna idea?
¿Es Bar realmente una clase o una plantilla? Las respuestas serán diferentes si Bar es una plantilla, es decir, si Bar no es única y, por lo tanto, Bar :: someType_t tampoco es única. –