In C ++, wenn ich versuche, einen Code zu schreiben, der umgekehrt einer Typliste zurückgibt, was ich geschrieben habe (eine Benutzer -definierte Vorlagenklasse): < /p>
template
constexpr decltype(auto) merge(const type_list& first, const type_list& second)
{
return type_list();
}
template
constexpr decltype(auto) _reverse(type_list ls)
{
if constexpr (empty(ls)) return type_list();
return merge(_reverse(type_list()),type_list());
}
< /code>
Und wenn ich versuche zu rennen: < /p>
aml::type_list ls;
auto x = aml::_reverse(ls);
< /code>
Clang sagt: < /p>
In file included from test.cpp:4:
././lesson_4.hpp:64:16: error: no matching function for call to '_reverse'
64 | return merge(_reverse(type_list()),type_list());
| ^~~~~~~~
././lesson_4.hpp:64:16: note: in instantiation of function template specialization 'aml::_reverse' requested here
test.cpp:10:16: note: in instantiation of function template specialization 'aml::_reverse' requested here
10 | auto x = aml::_reverse(ls);
| ^
././lesson_4.hpp:61:27: note: candidate template ignored: failed template argument deduction
61 | constexpr decltype(auto) _reverse(type_list ls)
| ^
1 error generated.
< /code>
Könnten Sie mir bitte erklären, warum Compiler beispielsweise nicht sofort umgekehrt Funktionsvorlage ? Und warum heißt es, dass eine weitere Spezialierung wie benötigt wird? Weil ich denke>
Warum erfordert die Instanziierung von Vorlagen eine Spezialierung für den Fall, in dem sie bereits für alle Fälle durch ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post