У меня есть проект на C++, который имеет более 50 классов. Эти классы можно разделить на 7 разных папок, но большинство из этих классов используются в разных частях кода. Поскольку я использую Netbeans для разработки, он компилирует и связывает все объектные файлы друг с другом. Следовательно, он связывает все файлы с другими, которые занимают много времени. Для устранения этой проблемы я использовал CMake и попытался отдельно скомпилировать каждую категорию независимо от каждой категории для всех требуемых. Но через некоторое время многие «Неопределенные ссылки на ...» начинаются, когда я включаю некоторые заголовки в другие модули. Предлагаемое мне новое решение создает класс Facade для каждой категории, который обрабатывает каждую операцию категории. Но для того, чтобы удалить include dependency, было сказано, что я не могу использовать публичные функции для каждого класса категорий. вместо этого я должен получить целевой объект и передать его функции класса Фасад, чтобы выполнить его для меня в других классах. например, предположим, что этот сценарий:лучший способ улучшения скорости компиляции в C++
ClassA.h:
Class A{
int calculateSomething(string str);
}
ClassA.cpp:
int A::calculateSomething(string str){
if(str="1") return 1;
}
ClassAFacade.h
Class A;
Class AFacade{
static int calculateSomething(Class A*, string str);
static A* getA();
}
ClassAFacade.cpp
#include "A.h"
int AFacade::calculateSomething(Class A*, string str){
return A->calculateSomething(str);
}
A* AFacade::getA(){
return new A();
}
ClassB.h:
#include "AFacade.h"
Class B{
void someMethod();
}
ClassB.cpp:
#include "B.h"
void B::someMethod(){
A* aptr = AFacade::getA();
int tmp = AFacade::calculateSomething(aptr,"test");
}
Хотя это решение, похоже, разрешает мою проблему, но это странно. потому что он фактически предотвращает вызовы функций и дает это разрешение определенному классу (7 категорий Классы Фасада). Считаете ли вы, что это решение верно? можете ли вы предложить лучшее решение для решения этой проблемы?
Посмотрите на идиому PIMPL. – hyde
Фасад должен перегруппировать некоторые системы в более простой интерфейс. Вы можете использовать интерфейс для A, чтобы скрыть его внутреннее. – Jarod42
Самый эффективный способ - получить более быстрый ПК –