В следующем коде:Как решить эту двусмысленность?
template <int...> struct IndexSequence {};
template <int, int, typename, int...> struct Helper;
template <int Start, typename Coefficients, int... Is>
struct Helper<Start, Start, Coefficients, Is...> {
using type = IndexSequence<Is...>;
};
template <int Start, int N, int... As, int... Is>
struct Helper<Start, N, IndexSequence<As...>, Is...> :
Helper<Start, N-1, IndexSequence<As...>, N-1, Is...> {};
int main() {
Helper<2,5, IndexSequence<1,2,3>>::type a;
}
я получаю ошибку компиляции:
ambiguous class template instantiation for 'struct Helper<2, 2, IndexSequence<1, 2, 3>, 2, 3, 4>'
Я полагал, что это разрешило бы к специализации
template <int Start, typename Coefficients, int... Is>
struct Helper<Start, Start, Coefficients, Is...> {
using type = IndexSequence<Is...>;
};
Но я предполагаю, что это также чтение
struct Helper<Start, N, IndexSequence<As...>, Is...> :
Helper<Start, N-1, IndexSequence<As...>, N-1, Is...> {};
Как решить эту двусмысленность?
Как использовать код библиотеки? http://en.cppreference.com/w/cpp/utility/integer_sequence –
Ну, вы можете сказать по имени «Коэффициенты», что я пытаюсь обобщить std :: integer_sequence, указав полином с коэффициентами, указанными 'As ... '. Я уже написал и протестировал 'PolynomialValue :: value' в моей программе, чтобы сделать это (чтобы заменить второй« N-1 »в приведенном выше коде. У меня просто проблемы с указанной двусмысленностью. –
prestokeys