C ++ - 使用变量而不知道它的名称

时间:2016-05-24 20:11:56

标签: c++ c++11 plugins

我有一个使用插件的程序。当我正在开发中时,这些插件目前只是我在重新编译之前在项目中添加或删除的.h和.cpp文件,但最终它们将成为库。

每个插件都包含向量中的数据列表,我需要动态加载来自插件的数据,而不知道哪些插件存在。例如:

// plugin1.h

extern vector<int> plugin1Data;

// plugin2.h

extern vector<int> plugin2Data;

// main.cpp

vector<vector<int>> pluginDataList;

int CountPlugins () {

    // Some function that counts how many plug-ins are present, got this bit covered ;)
}

int main() {

    int numPlugins = CountPlugins();

    for (int i = 0; i < numPlugins; i++) {

        vector<int> newPluginData = /***WAY TO ADD PLUGIN DATA!!!***/;

        pluginDataList.push_back(newPluginData);
    }
}

我已经访问了我的CountPlugins()函数中存在的每个插件的名称,并且有一个名称列表,所以我的第一个直觉就是使用每个插件中的名称来创建一个变量名称,如:

vector<string> pluginNames = /*filled by CountPlugins*/;

string pluginDataName = pluginNames.at(i) + "Data";

// Use pluginDataName to locate plugin1Data or plugin2Data

这是我之前在c#中做过的事情,当时我常常弄乱团结,但我已经阅读了一些stackoverflow帖子,清楚地说明在c ++中这是不可能的。据我所知,它在C#中也是一个相当混乱的解决方案。

如果每个插件都是一个类而不仅仅是一组向量,我可以访问像plugin2.data这样的特定数据......但是我仍然需要能够引用每个插件中存储的对象,并且这意味着当我开始编译插件作为库时,我将始终必须链接到类声明和定义,这是不理想的(虽然它不会是不可能的,如果它会给出一个更好的解决方案全部)。

在此之后,我完全没有想法,欢迎提供任何帮助!

谢谢!皮特

1 个答案:

答案 0 :(得分:0)

为什么不在应用程序和插件之间将数据保存为JSON?通过这种方式,您还可以允许其他类型的技术插入您的应用程序,例如基于javascript的插件通过嵌入式版本的v8或c#/。net plugins通过mono。'