2017-05-31 13 views
-1

でテンプレート内で、私はこのコードサンプルを見つけました:2種類(?ワード)LLVMのコードではC++

template <typename TagT, typename... MemberTs> class PointerSumType { 
    uintptr_t Value; 

    typedef detail::PointerSumTypeHelper<TagT, MemberTs...> HelperT; 

public: 
    PointerSumType() : Value(0) {} 

    /// A typed constructor for a specific tagged member of the sum type. 
    template <TagT N> 
    static PointerSumType 
    create(typename HelperT::template Lookup<N>::PointerT Pointer) { 
    PointerSumType Result; 
    void *V = HelperT::template Lookup<N>::TraitsT::getAsVoidPointer(Pointer); 
    assert((reinterpret_cast<uintptr_t>(V) & HelperT::TagMask) == 0 && 
      "Pointer is insufficiently aligned to store the discriminant!"); 
    Result.Value = reinterpret_cast<uintptr_t>(V) | N; 
    return Result; 
    } 

    TagT getTag() const { return static_cast<TagT>(Value & HelperT::TagMask); } 

    template <TagT N> bool is() const { return N == getTag(); } 
    //..... 
}; 

私の質問は:template <TagT N>を意味するもの、それは内部の二つの単語を持っていることが可能ですかテンプレート?

お返事ありがとうございます。

P.S.あなたはこのコードを見つけることができますhttp://llvm.org/docs/doxygen/html/PointerSumType_8h_source.html

+2

'template 'も2語です。 2つの言葉を持たないのはどうでしょうか? – melpomene

+3

__Non-typeテンプレートのパラメータ__ – Danh

答えて

0

OK、コメントのおかげで、私は理解した!私はばかげていた:今のようなタイプはTagTでintではありませんでした。テンプレートのタイプ自体がテンプレートタイプなので、混乱していました...しかし、OK!

関連する問題