У меня есть следующая проблема:элемента в зависимости от параметра шаблона
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
-many 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
(именуемый как «вторая реализация» в коде).
К сожалению, я не знаю, как это можно реализовать - решение выше не работает. У кого-нибудь есть идея?
Большое спасибо заранее.
Спасибо! Вы знаете, почему 'A' не вызывает ошибку SFINAE для пустого 'N_i'? –
@abraham_hilbert: 'A' не зависит от параметра шаблона метода. 'A ' недействителен для любого значения параметра шаблона метода. –
Jarod42