У меня есть одноэлементный класс, называемый Master
. У этого класса есть другие объекты, которые выполняют определенную работу. Класс Master
имеет метод get
для этих объектов.Глобальные встроенные функции
namespace Framework {
class Master {
private:
NetworkController * mNetworkController;
FileController * mFileController;
static Master * gInstance;
public:
static Master * getInstance();
NetworkController * getNetworkController();
FileController * getFileController();
}
}
Я использую эти объекты allthoughout программы следующим образом:.
Framework::Master::getInstance() -> getNetworkController()
Framework::Master::getInstance() -> getFileController()
Как вы можете видеть, это немного долго и отнимает много времени, чтобы набрать Так что я попытался положить их в макрос, например:
#define NETWORK_CONTROLLER() Framework::Master::getInstance() -> getNetworkController()
#define FILE_CONTROLLER() Framework::Master::getInstance() -> getFileController()
namespace Framework {
class Master {
...
}
}
Однако, я нахожу этот метод беспорядочным и запутанным. Поэтому я попытался использовать методы inline
и добавил их в один файл заголовка.
#ifndef __FrameworkHelper__
#define __FrameworkHelper__
inline Framework::NetworkController * MasterNetworkController() { return Framework::Master::getInstance() -> getNetworkController(); }
inline Framework::FileController * MasterFileController() { return Framework::Master::getInstance() -> getFileController(); }
#endif
Но он дал мне ошибку компиляции при попытке использовать их на другой класс поговорке:
error C2653: 'Framework' : is not a class or namespace name
Я не знаю, почему она выдаст ошибку, как это. Как я могу сделать эти встроенные методы доступными по всей моей программе?
Вам нужно будет опубликовать больше кода заголовка, в котором вы указали 'inline', чтобы показать, где находится проблема. –
Синглтоны вызывают всевозможные неприятности, не так ли? – doctorlove
@NicholasSmith Я обновил вопрос. – alxcyl