У меня был более длинный и сложный вопрос, и у меня есть этот код 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;