Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态检查类标识符是否已经存在_C++ - Fatal编程技术网

C++ 静态检查类标识符是否已经存在

C++ 静态检查类标识符是否已经存在,c++,C++,我有一组派生自相同基类的类,大致如下所示: class IClass { public: virtual int64_t getIdentifier() const = 0; }; template<int64_t ID> class Base : public IClass { public: static const int64_t s_identifier = ID; virtual int64_t getIdentifier() const { re

我有一组派生自相同基类的类,大致如下所示:

class IClass
{
public:
    virtual int64_t getIdentifier() const = 0;
};

template<int64_t ID>
class Base : public IClass
{
public:
    static const int64_t s_identifier = ID;
    virtual int64_t getIdentifier() const { return s_identifier; }
};
class Derived : public Base<0x630aea1e>
{
};

我正在寻找一种方法来警告是否有两个具有相同标识符的派生类(以避免复制和粘贴错误,或者仅仅因为有人将两次
0x12345678
作为ID)。我认为这必须在编译时完成,但我目前无法想出一种方法来完成,也许有人可以帮助我

不确定语言中是否有一种方法可以满足您的需求。您可以始终进行单元测试,以确保所有ID都是唯一的。您需要提前知道所有的类类型。问题似乎非常类似(不一定重复),您在编译时无法知道这一点,因为您无法知道其他翻译单元将实例化哪些类型。充其量,您可能会提出生成链接器错误的方案。请注意,您可以让编译器为所有类生成ID,但也一定要阅读注释,因为有一些众所周知的不一致编译器会破坏这一技巧:。不确定该语言中是否有实现您所需的方法。您可以始终进行单元测试,以确保所有ID都是唯一的。您需要提前知道所有的类类型。问题似乎非常类似(不一定重复),您在编译时无法知道这一点,因为您无法知道其他翻译单元将实例化哪些类型。充其量,您可能会提出生成链接器错误的方案。请注意,您可以让编译器为所有类生成ID,但也一定要阅读注释,因为有一些众所周知的不一致编译器会破坏这一技巧:。