Я много использовал форвардные объявления; они помогают избежать множества #include
, улучшить время компиляции и многое другое. Но что, если я хочу объявить класс в стандартной библиотеке?
// Prototype of my function - i don't want to include <vector> to declare it!
int DoStuff(const std::vector<int>& thingies);
Я слышал, что пересылать объявление std::vector
запрещено / невозможно. Теперь этот ответ на несвязанный вопрос предлагает переписать мой код следующим образом:
stuff.h
class VectorOfNumbers; // this class acts like std::vector<int>
int DoStuff(const VectorOfNumbers& thingies);
stuff.cpp
// Implementation, in some other file
#include <vector>
class VectorOfNumbers: public std::vector<int>
{
// Define the constructors - annoying in C++03, easy in C++11
};
int DoStuff(const VectorOfNumbers& thingies)
{
...
}
Теперь, если я использую VectorOfNumbers
вместо std::vector<int>
во всех контекстах моего проекта, все будет хорошо, и мне больше не нужно #include <vector>
в моих файлах заголовков!
Есть ли у этой техники серьезные недостатки? Может ли выгода от возможности продвигать-декларировать vector
перевесить их?