nak*_*iya 2 c++ struct shared-objects
我有以下结构将用于保存插件信息.我很确定这会随着时间的推移而改变(最可能添加).假设这个文件将被修复,这里有什么比我做的更好吗?
struct PluginInfo
{
public:
std::string s_Author;
std::string s_Process;
std::string s_ReleaseDate;
//And so on...
struct PluginVersion
{
public:
std::string s_MajorVersion;
std::string s_MinorVersion;
//And so on...
};
PluginVersion o_Version;
//For things we aren't prepared for yet.
void* p_Future;
};
Run Code Online (Sandbox Code Playgroud)
此外,在为此系统构建共享对象时,是否应采取任何预防措施.我的预感是我会遇到很多库兼容性问题.请帮忙.谢谢
怎么样,或者我觉得太简单了?
struct PluginInfo2: public PluginInfo
{
public:
std::string s_License;
};
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中,您可能只传递指向PluginInfos的指针,因此版本2与版本1兼容.当您需要访问版本2成员时,您可以使用其中一个dynamic_cast<PluginInfo2 *>或使用显式pluginAPIVersion成员来测试版本.
您的插件是使用相同版本的C++编译器和std库源编译的(或者它的std :: string实现可能不兼容,并且所有字符串字段都会中断),在这种情况下,您必须重新编译插件,并且向结构添加字段无关紧要
或者你想要与以前的插件二进制兼容,在这种情况下坚持使用普通数据和固定大小的char数组(或者提供一个API来根据大小为字符串分配内存或传入一个const char*),在这种情况下它不是闻所未闻的是在结构中有一些未使用的字段,然后在需要时将它们更改为有用的命名项.在这种情况下,在结构中有一个字段来说明它代表哪个版本也很常见.
但是很少期望二进制兼容性并使用std :: string.您永远无法升级或更改编译器.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |