插件的初始化程序问题.测试
initalizer problem with plugins. a test
我有一个更长更复杂的问题,下面的代码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("%sn", (*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;
};
我修改了2行并添加了ForceInit。它应该是安全的,但未经证实。
Plugin(const std::string&n) : name(n){ static std::list<Plugin*> plugins; this->plugins=&plugins; if(n.length()==0) return; plugins.push_back(this); }
static std::list<Plugin*>* ForceInit() { Plugin d(""); return plugins; }
std::list<Plugin*>& plugins = *Plugin::ForceInit(); //global name plz
相关文章:
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 我应该在 main 函数中写什么来测试我的问题?
- 我在使用相等性测试布尔运算符时遇到问题
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 大型测试用例中C++ dfs 问题中的小错误
- CMake 的测试:找不到图像(可能的 rpath 问题)
- 将我的主输出库与测试可执行文件链接时出现问题
- 使用 Catch2Farmework 测试我的函数时出现问题
- 在C++测试家庭作业问题中的字符串输入时无法退出循环(作为数据验证)
- (指针)降低测试分数后计算平均功能的问题
- 测试外壳,插入和快速的程序问题
- 用谷歌基准测试简单代码的问题
- 测试项目在访问私有静态方法时遇到问题,尽管我从未直接调用过它
- 在 Travis CI 上运行 C++ 测试时出现问题.Cmake 配置.如何在特拉维斯 ci 上运行测试套件?
- 提高.测试 在 dll 中使用 BOOST 测试用例和在 exe 中的运行器中出现问题
- C++中的Miller-Rabin素性测试问题
- 黑莓 10 SDK 测试版 2 中的列表视图滚动问题
- 试图捕获不平衡的分隔符.我需要显示与之关联的行号.遇到问题和我的测试文件
- 测试质数时遇到问题
- 插件的初始化程序问题.测试