我在一个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) {}
};
然后我得到那个编译器错误,我不知道如何处理它。