для других идей о ускорении компиляции.

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

Возможно ли использование предварительных объявлений, несмотря на шаблоны? Я пытаюсь что-то в соответствии с примером ниже, где я пытался обойти#include <vector>Например, но это дает мне ошибку компоновщика, потому чтоpush_back не определено

#include <iostream>

namespace std {
  template<class T>
  class vector {
  public:
    void push_back(const T& t);
  };
}

int main(int argc, char** argv) {
  std::vector<int>* vec = new std::vector<int>();
  vec->push_back(3);
  delete vec;
  return EXIT_SUCCESS;
}

$ g++ fwddecl.cpp
ccuqbCmp.o(.text+0x140): In function `main':
: undefined reference to `std::vector<int>::push_back(int const&)'
collect2: ld returned 1 exit status

Я однажды попробовал предварительно скомпилированные заголовки, но это не изменило время компиляции (я действительно удостоверился, что они действительно были загружены вместо реальных заголовков). Но если вы все скажете, что путь скомпилированных заголовков должен быть подходящим, я попробую еще раз.

ОБНОВИТЬ: Некоторые люди говорят, что не стоит заранее объявлять классы STL. Я должен подчеркнуть, что STLvector выше был только пример. Я на самом деле не пытаюсь заранее объявить классы STL, но речь идет о других, сильно шаблонных классах какой-то библиотеки, которые я должен использовать.

ОБНОВЛЕНИЕ 2: Есть ли способ сделать приведенный выше пример на самом деле компилировать и ссылаться правильно? Логан предлагает использовать-fno-implicit-templates и положиtemplate class std::vector<int> где-то, по-видимому, в отдельном.cpp файл, который компилируется с-fno-implicit-templates, но я все еще получаю ошибки компоновщика. Опять же, я пытаюсь понять, как это работает дляstd::vector так что я могу затем применить его к шаблонным классам, которые я на самом деле использую.

Ответы на вопрос(4)

Ваш ответ на вопрос