如何实现动态模块(在头文件中)加载c++
How to implement dynamic module (in header files) loading c++
我想根据定义加载各种头文件(模块、插件)。这是我的方法:
template<typename T = float>
class container {
T *_data;
#ifdef mymodule1
#include mymodule1
#endif
...}
Mymodule1.h:
container<T> fooOnContainer() [maybe const] {
makesomething involving the T template parameter
}
在包含"main"的文件中:
#define mymodule1 "mymodule1.h"
#include "container.h"
in main { using it }
因此,基本上只有定义好的头文件才会包含在我的容器中。我在名为"cimg"的库中看到过这种方法,但我无法使其发挥作用,因为编译器无法推导模板参数。如果我做这样的东西也没关系:
container<T>& fooOnContainer(T param) {
...
}
但是,有没有一种方法可以像第一个"mymodule1.h"中那样做到这一点?可能是操作员过载?或者,如果不可能的话,有人能给我一个更好、简单的方法吗?(我真的不明白它是如何为那个图书馆工作的:)
编辑:
对不起,如果我是不确定的,所以这里有一些代码:
这是一个毫无意义的例子,但我想做这样的东西,但当然更复杂:
Mymodule1.h:
int getWidth() const {
return (*this)._width;
}
intellisense说:"在非成员函数上不允许使用类型限定符"
另一个例子:
T getPos(int x) const {
T* px;
return _data[x];
}
intellisense说:"T"未定义,标识符"_data"未定义
哦,所以你只从intellisense得到错误?不是来自实际的编译器?这是因为在编辑Mymodule1.h
文件时,编辑器没有所有数据,编辑器不知道代码实际上是一个更大类的一部分。
解决方案?如果你想继续使用这样的头文件,那就没有了。唯一的解决方案是不使用头文件,而是围绕实际代码使用预处理器条件。
它类似于include-guard,应该使用
#ifndef
而不是#ifdef
...
#ifndef mymodule1
#include mymodule1
#endif
...
这里的问题是编译器将#include"a.h"替换为.h文件的内容。不管它包含什么。若当前上下文中的语法是正确的,那个么它应该是好的。
我试过你的代码,一切都很好。因此,请提供有关错误的详细信息。
相关文章:
- 将 bmp 文件加载到 TSpeedButton 中
- 如何将文本文件加载到 QListwidget 并将其保存回来
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- 优化从文件加载QImage
- 将csv文件加载到MySQL C++中
- 从文件加载结构
- 如何在 QT 中显示文件加载状态
- C++ 如何从文件加载异类集合
- 从文本文件加载链表并打印时无限循环
- Kotlin 从文件加载类的集合?
- 如何从文件加载QJsonDocument
- SFML 将图像从 txt 文件加载到矢量中仅加载最后一个图像
- 使用ifstream从DAT文件加载数据
- 从 C 中的文件加载结构时出现分段错误
- 从二进制文件加载列表后,我的代码似乎进入了无限循环
- Qml:从文件加载组件时将参数作为 URL 的一部分传递
- 将浮点数保存在文本文件中,然后从文本文件加载回去(OpenGL和C++)
- 从TXT文件加载迷宫
- 从文件加载uint64_t值
- 如何在 c++ 中将二进制文件加载/读取到"vector<vector< bitset<32> >"中?