私は、次のような問題があります:あなたは上記を参照できるように、私はテンプレート引数として期待していたクラスA
を実装しようメンバ関数の実装
template< typename T, size_t N, size_t... N_i >
class A
{
public:
// ...
// first implementation
template< size_t M = sizeof...(N_i)+1, typename std::enable_if< M!=1, size_t >::type = 0 >
A<T, N_i...> operator[](size_t i)
{
A< T, N_i... > res{ ... };
return res;
}
// second implementation
template< size_t M = sizeof...(N_i)+1, typename std::enable_if< M==1, size_t >::type = 0 >
T operator[](size_t i)
{
return ... ;
}
};
をタイプT
(例えばint
またはfloat
)およびsizeof...(N_i)+1
-many size_t
。戻り型A < T, N_i... >
の場合sizeof...(N_i)+1 > 1
ため
- 一の実装:
通過
size_t
の数に依存し(すなわちsizeof...(N_i)+1
)、私は異なる結果型を持つメンバ関数operator[](size_t)
に異なる実装を使用します - の場合は
sizeof...(N_i)+1 == 1
、戻り値のタイプがT
の場合(コード内では「第2の実装」と呼ばれます)のいずれかを使用します(コードでは「第1の実装」と呼ばれます)。
残念ながら、これはどのように実装できるのかわかりません。上記の解決方法は機能しません。誰にもアイデアはありますか?
事前に感謝します。
ありがとう! 'A'が空の 'N_i'に対してSFINAEエラーを引き起こさない理由が分かりますか? –
@abraham_hilbert: 'A'はメソッドのテンプレートパラメータに依存しません。 'A 'は、メソッドのテンプレートパラメータの値に対して無効です。 –
Jarod42