Ben uzmanlaşma ile aşağıdaki şablon işlevi vardır: dönüştürmek için herhangi bir yolu var mıparametre paketinde her öğe üzerinde işlevini uygulayın
template<typename ... Args>
void doSomething(Args ... args) {
// Convert parameter pack using convert function above
// and call any other variadic templated function with
// the converted args.
}
:
// Pass the argument through ...
template<typename T, typename U=T>
U convert(T&& t) {
return std::forward<T>(t);
}
// ... but convert std::strings
const char* convert(std::string s) {
return s.c_str();
}
Sonra gibi variadic şablon işlevi varsa parametre paketi, yorumdaki gibi dönüştürme işlevini kullanıyor mu?
Özgün amacım std :: string öğesini, dizgelerde ilk olarak .c_str() öğesini çağırmak zorunda kalmadan, printf gibi bir işlevde '% s' değerine geçebilmekti. Ama eğer bu basit bir şekilde yapılabiliyorsa genel olarak da ilgileniyorum, denemem başarısız oldu. something(convert(args)...)
şeklinde genişleyen parameter pack expansion olduğunu
btw, 'doSomething', yönlendirme referanslarını kabul etmiyor; Ayrıca 'convert (std :: string)', sarkan bir işaretçi döndürür. Yani bazı değişiklikler yapmak isteyebilirsiniz. – StoryTeller
@StoryTeller Sadece önermek istediğim kadarıyla yazdırmak istediğimden bu yana işaretçiyi iyi bulmayı düşünüyorum. – Zitrax
's' dönüştürmek için yereldir. Nasıl iyi olabilir? – StoryTeller