【发布时间】:2011-11-09 06:16:50
【问题描述】:
我遇到了一个奇怪的问题,我需要有一个默认构造函数才能让我的模板类工作,但我想与模板一起使用的一些类不能有默认构造函数。
我的意思是某些类不能有默认构造函数是它们有一个 const 引用字段,因此,它们必须在构造函数/初始化列表中设置。如果我有默认构造函数,则无需设置这些引用。
所以,我想有两种可能的解决方案:有时在模板类中找到允许非默认构造函数的方法,或者找到在默认构造函数中设置 const 引用字段的方法。
我该如何解决这个问题?
这是我的模板代码:
#pragma once
template<class T>
class Singleton
{
public:
static T* getInstance()
{
if(!instance) instance = new T;
return instance;
}
static void setInstance(T* inst)
{
instance = inst;
}
protected:
Singleton();
~Singleton();
private:
Singleton(Singleton const&);
Singleton& operator=(Singleton const&);
static T* instance;
};
template<class T> T* Singleton<T>::instance = 0;
这是我设置 const 引用的地方(在 .cpp 中):
InputHandler::InputHandler(const sf::Input& inputObject)
: input(inputObject)
{
并且输入在header中定义:
const sf::Input& input;
由于这个代码区域(在不同的文件中),我必须使用常量引用:
const sf::Input& input = window.GetInput();
InputHandler* inputHandler = new InputHandler(input);
Singleton<InputHandler>::setInstance(inputHandler);
GetInput() 不是我的方法之一,它必须返回一个 const sf::Input&
【问题讨论】:
-
你为什么使用参考会员?
-
看代码无法回答你的问题。添加模板类的相关部分。
-
为什么模板需要它的参数来拥有默认构造函数?在不知道是否应该修改模板而不需要它或修改类以拥有它的情况下,这是不可能的。
-
我在问题中添加了我的代码,所以我希望现在更清楚发生了什么。
-
我会认真考虑重新设计。以下是关于 Singleton 反模式的一些 thoughts。
标签: c++