2016-05-27 4 views
-3

В моем файле заголовка я хочу избежать использования #include, но мой класс будет иметь вектор или указатель на вектор. Я доволен только указателем, но я не могу понять, как его объявить. Должен ли я объявить его как пустоту * и всегда бросать его? Это будет хромой.Вперед объявить указатель на контейнер 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; 
}; 

Обращаем ваше внимание на то, что я хочу, чтобы у меня был контейнер, который должен храниться в моем классе, а не в контейнере. Размер указателей известен без необходимости ссылаться на объявление контейнера, поэтому, пожалуйста, не отвечайте, что это невозможно сделать, потому что компилятор должен знать декларацию контейнера.

+2

* «В моем файле заголовка я хочу, чтобы избежать использования #include» * Это проблема именно там, просто включить то, что вам нужно. –

+3

Почему вы хотите избежать '#include '? Не должно быть никакого вреда. –

+0

Передовые декларации существуют по какой-то причине, ребята. Существует множество литературы по обрезке # включает в себя сокращение перекомпиляции, улучшение времени компиляции, улучшение переносимости, нарушение круговых зависимостей и т. Д. В моем случае это заявление будет потребляться компилятором CUDA, а также основным компилятором C++, и стоит попробовать чтобы не включать слишком много дерьма в коде, который будет анализировать CUDA. Доверьтесь мне. –

ответ

0

Может быть, это работает в вашей ситуации:

//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

Не наследуйте от стандартных контейнеров. http://stackoverflow.com/questions/2034916/is-it-okay-to-inherit-implementation-from-stl-containers-rather-than-delegate Идиома pimpl в противном случае была бы прекрасной. –

Смежные вопросы