У меня есть следующая проблема:
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 ... ;
}
};
Как вы можете видеть выше, я пытаюсь реализовать класс A
, который ожидает в качестве аргументов шаблона тип T
(например, int
или float
) и sizeof...(N_i)+1
-много size_t
.
В зависимости от количества переданных size_t
(т.е. sizeof...(N_i)+1
) я буду использовать другую реализацию для функции-члена operator[](size_t)
с другим типом результата:
- одна реализация для случая
sizeof...(N_i)+1 > 1
с типом возвращаемого значенияA < T, N_i... >
(называемая в коде "первой реализацией") - и один для случая
sizeof...(N_i)+1 == 1
с типом возвращаемого значенияT
(называемый в коде "второй реализацией").
К сожалению, я понятия не имею, как это можно реализовать - решение выше не работает. У кого-нибудь есть идея?
Спасибо заранее.