我遇到了一个奇怪的问题,在这个问题中,我需要一个默认的构造函数才能让我的模板类工作,但是我想在模板中使用的一些类不能有默认的构造函数。
我的意思是,某些类不能有默认构造函数,因为它们有一个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)
{和输入在标头中定义:
const sf::Input& input;我必须使用常量引用,因为这个代码区域(在不同的文件中):
const sf::Input& input = window.GetInput();
InputHandler* inputHandler = new InputHandler(input);
Singleton<InputHandler>::setInstance(inputHandler);GetInput()不是我的方法之一,它必须返回一个const::Input&
发布于 2011-11-08 08:48:03
如果您有一个引用成员,那么您就不能(明智地)使您的类默认为可构造的或可分配的,因为必须初始化引用,并且不能重新分配。
如果您需要类中的这些属性,那么您可能希望成员是一个指针,默认情况下初始化为null,并在需要时稍后分配。
https://stackoverflow.com/questions/8047602
复制相似问题