Implementieren einer "static-if" -Logik zur Kompilierungszeit für verschiedene Zeichenfolgentypen in einem Container
Ich möchte eine Funktionsvorlage schreiben, die einen Container mit Zeichenfolgen verarbeitet, z. B. einstd::vector
.
Ich möchte beide unterstützenCString
undstd::wstring
mit der gleichen Vorlagenfunktion.
Das Problem ist, dassCString
und wstring haben unterschiedliche Schnittstellen, um beispielsweise die "Länge" eines @ zu ermitteCString
, du rufst dasGetLength()
-Methode, stattdessen rufen Sie für wstring @ asize()
oderlength()
.
Wenn wir hatten ein "static if" -Feature in C ++ könnte ich so etwas schreiben:
template <typename ContainerOfStrings>
void DoSomething(const ContainerOfStrings& strings)
{
for (const auto & s : strings)
{
static_if(strings::value_type is CString)
{
// Use the CString interface
}
static_else_if(strings::value_type is wstring)
{
// Use the wstring interface
}
}
}
ibt es eine Template-Programmiertechnik, um dieses Ziel mit den derzeit verfügbaren C ++ 11/14-Tools zu erreiche
PS
Ich weiß, es ist möglich, ein paar @ zu schreibDoSomething()
Überladungen mitvector<CString>
undvector<wstring>
, aber darum geht es nicht.
Außerdem möchte ich, dass diese Funktionsvorlage für jeden Container funktioniert, für den Sie eine range-for-Schleife verwenden können.