Ich möchte eine Funktionsvorlage schreiben, die auf einem Container mit Zeichenfolgen ausgeführt wird, z. B. std::vector
.Implementieren einer Kompilierzeit "static-if" -Logik für verschiedene Zeichenfolgetypen in einem Container
Ich möchte sowohl CString
als auch std::wstring
mit der gleichen Template-Funktion unterstützen.
Das Problem ist, dass CString
und wstring verschiedene Schnittstellen haben, zum Beispiel die „Länge“ eines CString
zu erhalten, rufen Sie die GetLength()
Methode, anstatt für wstring Sie size()
oder length()
nennen.
Wenn wir hatten ein „statisch, wenn“ Funktion in C++, könnte ich schreiben so etwas wie:
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
}
}
}
Gibt es eine Template-Programmierung Technik, um dieses Ziel mit den derzeit verfügbaren C++ zu erreichen 11/14 Werkzeuge?
PS
Ich weiß, es ist möglich, ein paar DoSomething()
Überlastungen mit vector<CString>
und vector<wstring>
zu schreiben, aber das ist nicht der Punkt, der Frage.
Darüber hinaus möchte ich, dass diese Funktionsvorlage für jeden Container funktioniert, auf dem Sie mit einer Range-for-Schleife iterieren können.
https://www.youtube.com/watch?v=hDwhfjBPKv8 gute Blitz Diskussion über das Thema aus dem Treffen C++ 2015 – odinthenerd