| Autor |
Nachricht |
Kellerautomat
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.06.2012
Beiträge: 910
|
Kellerautomat Mitglied
20:32:39 24.06.2012 Titel: |
Designfrage: Tail einer leeren Liste |
Zitieren |
Hallöle,
Ich bastle mir gerade eine TMP-Lib. Für Listen, repräsentiert durch das list-Template gibt es eine Template-Metafunktion "tail". Sollte tail bei einer leeren Liste ebenfalls eine leere Liste zurückgeben, oder sollte da eine static_assertion fliegen?
Grüße,
Der Kellerautomat |
|
|
|
 |
assert
Unregistrierter
|
assert Unregistrierter
21:23:28 24.06.2012 Titel: |
|
Zitieren |
static assertion.
Leere Listen sind ein gängiges Abbruchkriterium für die Rekursion. Wer das missachtet, hat wahrscheinlich einen Fehler gemacht. |
|
|
|
 |
Kellerautomat
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.06.2012
Beiträge: 910
|
Kellerautomat Mitglied
23:24:27 24.06.2012 Titel: |
|
Zitieren |
Hm, okay. Ist es eigentlich besser, wenn der User die Fehlermeldung vom Compiler + die Assertion bekommt, oder wenn ich dafür sorge, dass das Template im Fehlerfall gar nicht instanziert wird und der User somit nur die Assertion bekommt?
Sprich:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | namespace detail
{
template <typename L>
struct tail : tail<typename L::type>
{};
template <typename Head, typename... Tail>
struct tail<list<Head, Tail...>> : list<Tail...>
{};
}
template <typename L>
struct tail
: extend_if // prevent messy template error from propagating for empty lists
<
length<L>,
detail::tail<L>
>
{
static_assert(length<L>::value != 0, "tail of empty list requested");
}; | |
Man beachte den Kommentar. extend_if ist, wenn die Bedingung (hier Länge ungleich 0) wahr ist, von typename detail::tail<L>::type abgeleitet, andernfalls leer. Somit bekäme der User im Fehlerfall nur den Fehler der Assertion, weil detail::tail nicht instanziert wird. |
|
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 6874
|
cooky451 Mitglied
00:42:18 25.06.2012 Titel: |
|
Zitieren |
Auch wenn es vielleicht eleganter erscheint das Instanziieren sofort zu verhindern, ich glaube jeder User wird dir dankbar sein für eine ordentlich Lesbare Fehlermeldung anstatt des Template-Stacks, den eine TMP-Liste so hinter sich herzieht. |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Keksverteilungsbeauftragter
Zuletzt bearbeitet von cooky451 am 00:42:32 25.06.2012, insgesamt 1-mal bearbeitet |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|