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.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage