2016-05-27 1 views
-3

Dans mon fichier d'en-tête, je veux éviter d'utiliser #include mais ma classe aura un vecteur ou un pointeur vers un vecteur. Je me contente d'un simple pointeur, mais je n'arrive pas à comprendre comment le déclarer. Devrai-je le déclarer vide * et toujours le jeter? Ce serait boiteux.Forward déclare un pointeur vers un conteneur STL?

// What do I type here to forward declare vector? 

class Counters 
{ 
    Counters(); 

    void inc(const char* s); 

    void print(); 

    void clear(); 

private: 
    std::vector<int>* Counts; 
    int total; 
}; 

Veuillez noter que je ne veux qu'un POINTER TO un conteneur à stocker dans ma classe, PAS un conteneur. La taille des pointeurs est connue sans avoir besoin de se référer à la déclaration du conteneur, donc ne répondez pas que cela ne peut pas être fait parce que le compilateur a besoin de connaître la déclaration du conteneur.

+2

* « Dans mon fichier d'en-tête que je veux éviter d'utiliser #include » * C'est le problème là, il suffit d'inclure ce dont vous avez besoin. –

+3

Pourquoi voulez-vous éviter "#include "? Il ne devrait pas y avoir de mal à le faire. –

+0

Les déclarations anticipées existent pour une raison, les gars. Dans le cas présent, cette déclaration sera utilisée par le compilateur CUDA ainsi que par le compilateur C++ principal. pour éviter d'inclure trop de merde dans le code que CUDA va analyser. Croyez-moi. –

Répondre

0

Peut-être que cela fonctionne dans votre situation:

//header 
struct Container; 

struct Foo{ 
    Container *container; 
}; 

//cpp 
#include <vector> 

struct Container : std::vector<int>{ 

}; 

int main(){ 
    Foo foo; 
    foo.container = new Container; 
    foo.container->push_back(42); 
} 
+2

N'héritez pas de conteneurs standard. http://stackoverflow.com/questions/2034916/is-it-okay-to-inherit-implementation-from-stl-containers-rather-than-delegate L'idiome de pimpl serait sinon bien. –