我想要一个对象HIDDevice
来保持自身的静态std::map
。但是,当构造函数和析构函数变为私有时,下面的类会导致编译错误,如下所示:
class HIDDevice
{
public:
static HIDDevice* getDevice(unsigned short vendorID, unsigned short productID);
int writeData(const unsigned char *data, int length);
int readData(unsigned char *data, int length);
private:
static std::map<std::string, HIDDevice> m_hidDevices;
static bool isInitialized;
static void initHIDAPI();
HIDDevice(){};
HIDDevice(unsigned short vendorID, unsigned short productID, std::string serialNumber = "");
HIDDevice(std::string path);
~HIDDevice();
};
修改
错误消息如下:
error C2248: 'HIDDevice::HIDDevice' : cannot access private member declared in class 'HIDDevice'
答案 0 :(得分:1)
std::map
无法获得对您班级私人成员的特殊访问权限,因为它恰好具有std::map<something>
类型的静态成员。
您不能仅仅将std::map
声明为朋友,因为我无法保证std::map
成员实际调用构造函数和析构函数。此任务可以委派给内部实现类或独立函数。
即使你以某种方式管理必要的朋友,它也不会给你带来太多好处,因为任何人都可以声明同样的std::map
并在他们自己的地图中创建你班级的对象。
我建议公开构建器和析构函数。