0

我在一个message通常包含 的子类的类中嵌套了一个模板message,但是如果我希望它包含message自己,我会遇到 ctor 重载冲突的问题。(如果我能以某种方式让它忽略其中一种冲突方法会很好,但我不知道如何。)所以我尝试对messsage容器进行专门化,但后来我得到了

非命名空间范围“类消息”中的显式专业化

我已经研究过如何处理这样的错误(比如这里这里这里),但我不知道如何将这些解决方案硬塞到我的问题中。

class message {
    template<class T>
    class sptrTemplate : public QSharedPointer<T>
    {
    public:
        sptrTemplate() : QSharedPointer<T>() {}
        sptrTemplate(T *msg_ptr) : QSharedPointer<T>(msg_ptr) {}
        sptrTemplate(message *msg_ptr) : QSharedPointer<T>(static_cast<T *>(msg_ptr)) {}
    };
};

请记住,T通常是message. 唯一的例外是 when T is message。然后,第二个和第三个 ctor 之间存在明显的冲突。但是,如果我尝试专注于

    template <>
    class sptrTemplate<message> : public QSharedPointer<message>
    {
    public:
        sptr() : QSharedPointer<message>() {}
        sptr(message *msg_ptr) : QSharedPointer<message>(msg_ptr) {}
    };

然后我得到那个编译器错误,我不知道如何处理它。

4

0 回答 0