Im eine rekursive Template-Funktion zu schaffen versucht, allerdings halte ich den Fehler bekommen:Variadische Vorlage Argument Abzug/Substitution fehlgeschlagen, Metaprogrammierung
no matching function for call to meuPrint(int&, Separator&, string&)
während auch empfangen:
candidate: template string meuPrint(U ..., Separator&,string&).
struct Separator {};
template<class ...U>
string meuPrint(U ...b , Separator &placeholder , string& text)
{//end
char buffer[200];
sprintf(buffer , text.c_str() , b...);
return buffer;
}
template<class ...T, class ...U>
string meuPrint(U ...b , Separator &placeholder , string& text , string value , T ...a)
{//string
return meuPrint(b... , to_lower(value) , placeholder , text , a...);
}
template<class V, class ...T, class ...U>
string meuPrint(U ...b , Separator &placeholder , string& text , V value , T ...a)
{//middle
return meuPrint(b... , value , placeholder , text , a...);
}
template<class ...T>
string meuPrint(std::string _text , T ...a)
{//start
Separator placeholder;
return meuPrint(placeholder , _text , a...);
}
int main(int n , char** args)
{
string o = meuPrint( string("hello %i world") , 8);
std::cout << o << std::endl;
return 0;
}
Die Ziel hier ist nicht unbedingt die Kleinschreibung der Parameter, sondern ein Konzept zu testen. Ich verstehe nicht, warum der Compiler es versäumt, abzuleiten, während er mir später einige gültige Kandidaten nennt.
diesem Grund habe ich diese Klasse „Separator“ zwischen variadische Variablen hatte, die Sie erwähnt mehrdeutigen Situationen wie die, die zu lösen. Aber es scheint den Gedanken nicht zu lösen. –