0

message通常は のサブクラスを含むクラスにテンプレートをネストしましたmessageが、それ自体を含めたい場合はmessage、競合する ctor オーバーロードの問題に遭遇します。(競合するメソッドの 1 つを無視するようにできれば良いのですが、方法がわかりません。) そこで、messsagecontainee を特殊化しようとしましたが、

名前空間以外のスコープ「クラス メッセージ」での明示的な特殊化

そのようなエラー(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。次に、2 番目と 3 番目の ctor の間に明らかな競合があります。でも特化してみると

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

その後、そのコンパイラ エラーが発生し、その対処方法がわかりません。

4

0 に答える 0