gpt4 book ai didi

c++ - 插件的初始化程序问题。一个测试

转载 作者:行者123 更新时间:2023-11-28 08:19:18 25 4
gpt4 key购买 nike

我有一个更长更复杂的问题并且有这个代码 http://www.ideone.com/VEOvp

不过我会简化它。下面的代码有什么问题吗?有更好的方法吗?

我很担心这条线std::list<Plugin*>& plugins以及如何在保持引用的同时进行设置。但我会让你们把代码分开。

#include <list>
#include <string>
class Plugin{
public:
static std::list<Plugin*>*plugins;
std::string name;
Plugin(const std::string&n) : name(n)
{
static std::list<Plugin*> plugins;
this->plugins=&plugins;
plugins.push_back(this);
}
};

//main.cpp
#include "plugin.h"

class Plugin1 : public Plugin{
public:
Plugin1():Plugin("1"){}
};

static Plugin1 plugin;


std::list<Plugin*>* Plugin::plugins;
std::list<Plugin*>& plugins = *Plugin::plugins; //global name plz
int main(){
for(auto c=plugins.cbegin(); c!=plugins.cend(); ++c) {
printf("%s\n", (*c)->name.c_str());
}
}

//PluginA.cpp
#include "plugin.h"

class PluginA : public Plugin{
public:
PluginA():Plugin("A"){}
};

static PluginA plugin;

最佳答案

我觉得这很奇怪。如果您的目标是拥有某种全局插件容器/管理器,是否有任何理由不使用这样的单例模式:

class PluginContainer {
static PluginContainer& instance()
{
static PluginContainer* m_this = 0;
if(!m_this)
m_this = new PluginContainer;
return *m_this;
}

void register(Plugin* plugin) { ... add to a list ... }
const list<Plugin*>& plugins() const { ... return it ... }

protected:
PluginContainer() {}
};

class Plugin{
public:
Plugin(const std::string& n) : name(n)
{
PluginContainer::instance().register( this );
}
private:
std::string name;
};

关于c++ - 插件的初始化程序问题。一个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com