我正在尝试创建一个C ++单例模式对象,使用引用而非指针,其中构造函数采用2个参数
我查看了大量示例代码,包括: Singleton pattern in C++, C++ Singleton design pattern和C++ Singleton design pattern
我相信我理解所涉及的原则,但是尽管试图几乎直接从示例中提取代码片段,但我无法进行编译。为什么不 - 以及如何使用带参数的构造函数创建此单例模式对象?
我已将收到的错误放在代码评论中。
此外,我正在ARMmbed在线编译器中编译这个程序 - 可能/可能没有c ++ 11,我目前正试图找出哪个。
class Sensors
{
public:
static Sensors& Instance(PinName lPin, PinName rPin); //Singleton instance creator - needs parameters for constructor I assume
private:
Sensors(PinName lPin, PinName rPin); //Constructor with 2 object parameters
Sensors(Sensors const&) = delete; //"Expects ;" - possibly c++11 needed?
Sensors& operator= (Sensors const&) = delete; //"Expects ;"
};
#include "Sensors.h"
/**
* Constructor for sensor object - takes two object parameters
**/
Sensors::Sensors(PinName lPin, PinName rPin):lhs(lPin), rhs(rPin)
{
}
/**
* Static method to create single instance of Sensors
**/
Sensors& Sensors::Instance(PinName lPin, PinName rPin)
{
static Sensors& thisInstance(lPin, rPin); //Error: A reference of type "Sensors &" (not const-qualified) cannot be initialized with a value of type "PinName"
return thisInstance;
}
非常感谢!
答案 0 :(得分:7)
您应该创建静态局部变量,而不是引用。换到这个。
Sensors& Sensors::Instance(PinName lPin, PinName rPin)
{
static Sensors thisInstance(lPin, rPin);
return thisInstance;
}
这将在任何时候调用lPin
方法时返回相同的对象(由第一个rPin
和Sensors::Instance
创建)。