singleton.h
Code: Select all
#ifndef SINGLETON_H
#define SINGLETON_H
template<class T> class Singleton
{
public:
static T* Get();
static void Free();
protected:
Singleton();
~Singleton();
private:
static T* m_pInstance;
};
#endif // SINGLETON_H
Code: Select all
#include "singleton.h"
template<class T> Singleton<T>::Singleton()
{
}
template<class T> Singleton<T>::~Singleton()
{
}
template<class T>T* Singleton<T>::Get()
{
if (m_pInstance == 0)
m_pInstance = new T;
return m_pInstance;
}
template<class T>void Singleton<T>::Free()
{
delete m_pInstance;
m_pInstance = 0;
}
template<class T>T* Singleton<T>::m_pInstance = 0;
Code: Select all
#ifndef EDITORMANAGER_H
#define EDITORMANAGER_H
....
#include "singleton.h"
..
class EditorManager : public Singleton<EditorManager>, public wxEvtHandler
{
public:
...
private:
EditorManager();
~EditorManager();
...
};
#endif
Code: Select all
#include "editormanager.h"
EditorManager::EditorManager()
{
// Connect event handlers.
ConnectEventHandlers();
// Create a notebook so we can have multiple documents open.
m_pNotebook = new wxNotebook(Manager::Get()->GetAppWindow(),
wxID_ANY,
wxDefaultPosition,
wxDefaultSize);
m_pEasyPrinting = new wxHtmlEasyPrinting(_("Printing"), Manager::Get()->GetAppWindow());
m_pFindReplaceDialog = 0;
m_pFindReplaceData = new wxFindReplaceData;
Manager::Get()->GetAppWindow()->PushEventHandler(this);
}
EditorManager::~EditorManager()
{
if (m_pEasyPrinting)
{
delete m_pEasyPrinting;
m_pEasyPrinting = 0;
}
if (m_pFindReplaceData)
{
delete m_pFindReplaceData;
m_pFindReplaceData = 0;
}
if (m_pFindReplaceDialog)
{
m_pFindReplaceDialog->Destroy();
m_pFindReplaceDialog = 0;
}
for (unsigned int i = 0; i < m_pNotebook->GetPageCount(); ++i)
{
Editor* ed = static_cast<Editor* >(m_pNotebook->GetPage(i));
if (ed->IsModified())
{
wxString msg = _("The text in the ");
msg.append(ed->GetFilename());
msg.append(_(" file has changed!"
"\n\nDo you want to save changes in the "));
msg.append(ed->GetFilename());
msg.append(_(" file?"));
wxMessageDialog dlg(Manager::Get()->GetAppWindow(),
msg,
_("File changed"),
wxICON_QUESTION | wxYES_NO);
int ret = dlg.ShowModal();
switch (ret)
{
case wxID_YES:
{
ed->Save();
}
break;
case wxID_NO:
{
}
break;
default:
break;
}
}
}
m_pNotebook->Destroy();
Manager::Get()->GetAppWindow()->PopEventHandler(false);
}
....
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:4: undefined reference to `Singleton<EditorManager>::Singleton()'
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:22: undefined reference to `Singleton<EditorManager>::~Singleton()'
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:88: undefined reference to `Singleton<EditorManager>::~Singleton()'
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:88: undefined reference to `Singleton<EditorManager>::~Singleton()'
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:88: undefined reference to `Singleton<EditorManager>::~Singleton()'
P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:88: undefined reference to `Singleton<EditorManager>::~Singleton()'
objs\Debug\editormanager.o:P:\Programming\C++\wxWidgets\Text Editor\editormanager.cpp:88: more undefined references to `Singleton<EditorManager>::~Singleton()' follow
P:\Programming\C++\wxWidgets\Text Editor\manager.cpp:37: undefined reference to `Singleton<EditorManager>::Free()'
P:\Programming\C++\wxWidgets\Text Editor\manager.cpp:59: undefined reference to `Singleton<EditorManager>::Get()'