C ++:模板中的冲突重载和"非命名空间范围中的显式特化"错误

时间:2017-12-21 15:07:55

标签: c++ templates template-specialization constructor-overloading

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

  

非命名空间范围中的显式特化'类消息'

我已经研究过如何处理这类错误(例如hereherehere),但我无法弄清楚如何解决这些问题进入我的问题。

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的子类。唯一的例外是当T message时。然后,第二和第三个ctor之间存在明显的冲突。但如果我尝试专攻

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

然后我得到了编译器错误,我无法弄清楚如何处理它。

0 个答案:

没有答案