message
通常は のサブクラスを含むクラスにテンプレートをネストしましたmessage
が、それ自体を含めたい場合はmessage
、競合する ctor オーバーロードの問題に遭遇します。(競合するメソッドの 1 つを無視するようにできれば良いのですが、方法がわかりません。) そこで、messsage
containee を特殊化しようとしましたが、
名前空間以外のスコープ「クラス メッセージ」での明示的な特殊化
そのようなエラー(here、here、hereなど)に対処する方法を調査しましたが、これらのソリューションを問題に押し込む方法がわかりません。
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
。次に、2 番目と 3 番目の ctor の間に明らかな競合があります。でも特化してみると
template <>
class sptrTemplate<message> : public QSharedPointer<message>
{
public:
sptr() : QSharedPointer<message>() {}
sptr(message *msg_ptr) : QSharedPointer<message>(msg_ptr) {}
};
その後、そのコンパイラ エラーが発生し、その対処方法がわかりません。