0

*unique_ptr*typedef foo_type pointer;がデリータでオプションを管理する方法には驚きました。私はビジュアルスタジオ2012の実装を見て、例のために小さな実装を取り除きました:

// this helper defined a type named Type as Traits::Type if it exists
// otherelse it is defined as Implicit
template < class Implicit, class Traits >
class ResolveType {
    class WrapInt {
    public:
        WrapInt( int );
    };

    template < class T >
    static auto MyFn( int ) -> typename T::Type;

    template < class T >
    static auto MyFn( WrapInt ) -> Implicit;

public:
    typedef decltype( MyFn<Traits>(0) ) Type;
};

さて、これを書くことができれば: struct A { typedef unsigned int Type; }; 構造体 B { };

typedef ResolveType< int, A >::Type ResultA; // this will resolve to unsigned int
typedef ResolveType< int, B >::Type ResultB; // this will resolve to int

驚くべきことは、MyFn内部で B を使用する場合の不正な形式です。存在しないためですResolveTypetypename B::Type

3 つの質問があります。2.これが正しい標準的な行動である場合、その黒魔術の背後にあるルールは何ですか? 3.これは *enable_if* と関係がありますか?関数のオーバーロードの拒否を許可する方法のロジックを理解するのが難しいため、署名を無効にすることで上記の例と少し同じように?

ありがとう。

4

0 に答える 0