2017-01-11 10 views
4

からタイプを決定します。私はこれを行うことがしたい非型テンプレートパラメータ

template <typename T x> 
struct Test { 
    T val{x}; 
}; 

int main() { 
    Test<3> test; 
    return test.val; 
} 

But I can't. Right?


私は質問hereに答えたと私は次のテンプレートを使用します。

template <typename T, typename V, typename VP, V(T::*getf)(), void (T::*setf)(VP)> 

各タイプは手動で指定します。しかし、T,VVPは既にメンバ関数getfsetfの型へのポインタに含まれているため、重複しています。


しかし、私は唯一の

template <V(T::*getf)(), void (T::*setf)(VP)> 

または

template <V(T::*getf)(), void (T::*setf)(VP), typename T, typename V, typename VP> 

でテンプレートをしようとした場合、その後のタイプを決定することができません。


次私は専門を試してみました:

使用

typedef Accessor< 
    decltype(&TargetClass::GetFoo), 
    decltype(&TargetClass::SetFoo)> fooAcessor; 

場合のタイプのすべてを決定します。しかし、今、私は、もう唯一のタイプのポインタを持っていない

template <typename T, typename T2> 
struct Accessor; 

template <typename V, typename T, typename VP> 
struct Accessor <V(T::*)(), void (T::*)(VP)> 


タイプをテンプレート以外のパラメータから自動的に判別できるようにテンプレートを書き込む方法はありますか?

答えて

12

テンプレートを書き込んで、タイプが非タイプのテンプレートパラメータから自動的に判別できる方法はありますか? C++ 17では

、はい、declaring non-type template parameters with autoのおかげ:C++ 17、無前

template <auto x> 
struct Test { 
    decltype(x) val{x}; 
}; 

template <class T, T x> 
struct Test { 
    T val{x}; 
}; 
+2

@Muscampester He's Barry、魔法のC++ yorkshire! :D – Quentin

+2

@Quentin Ahem、[Westie](https://en.wikipedia.org/wiki/West_Highland_White_Terrier)! – Barry

+1

おっと。私は犬のことを知らない: - でもねえ、魔法があり、C++があり、それは犬だよ、それはわずか25%の失敗のようだ! – Quentin

関連する問題