2017-12-01 1 views
4

定数だから、可変引数テンプレートは、私はそれがこのように、別のクラスのテンプレート引数だ転送ジェネリッククラステンプレートを実装しようとしている

template <typename T, size_t N> 
class B 
{ 
    ... 

、このような

template <size_t N> 
class B 
{ 
    ... 

かさえ:このような可変の型名とスカラ定数を混在させたテンプレートパラメータとして受け入れる方法はありますか?

答えて

2

タイプに値を埋め込むことができます。これは、私が正しく呼び戻した場合、ブーストで長く使用されるテクニックで、C++ 11の標準ライブラリにstd::integral_constant(その有用性を示す)として追加されました。

C++ 17では、さらに簡単になりました。別名BためB2と併せて

template<auto val> 
struct constant : std::integral_constant<decltype(val), val> {}; 

、あなたが

template<typename T, typename N> 
struct B2 { using type = B<T, N::value>; }; 

template<typename... Args> 
struct A : public B2<Args...>::type {}; 

A<int, constant<42>> a; 
+0

としてそれを使用することは、それが現在のスタンダールのための最善の解決策だと思われる、ありがとうございました。 –

関連する問題