Vorrei scrivere un modello di funzione che funzioni su un contenitore di stringhe, ad esempio uno std::vector
.Implementazione di una logica "static-if" in fase di compilazione per diversi tipi di stringhe in un contenitore
Mi piacerebbe supportare sia CString
e std::wstring
con la stessa funzione di modello.
Il problema è che CString
e wstring hanno interfacce diverse, ad esempio per ottenere la "lunghezza" di un CString
, si chiama il metodo GetLength()
, invece, per wstring si chiama size()
o length()
.
Se avessimo un "statico se" funzione in C++, potrei scrivere qualcosa di simile:
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
}
}
}
C'è qualche tecnica di programmazione modello di raggiungere questo obiettivo con attualmente disponibili C++ 11/14 utensili?
PS
So che è possibile scrivere un paio di DoSomething()
sovraccarichi con vector<CString>
e vector<wstring>
, ma non è questo il punto della questione.
Inoltre, mi piacerebbe che questo modello di funzione funzionasse per qualsiasi contenitore su cui è possibile iterare utilizzando un ciclo range-for.
https://www.youtube.com/watch?v=hDwhfjBPKv8 buon discorso lampo sull'argomento dall'incontro C++ 2015 – odinthenerd