ı bir parametre paketi kullanılarak printf
yeniden oluşturun diyelim: derleyici farklı imzalara sahip 2 farklı işlevler oluşturmak istiyorsunuzÖzyinelemeli şablon parametre paketi işlevi her yineleme için özel bir işlev oluşturuyor mu?
printf("%d is the answer to life, the universe, and everything. Pi = %f", 42, 3.14);
:
void printf(const char* string)
{
std::cout << string;
}
template <typename T, typename... Params>
void printf(const char* string, T first, Params... p)
{
while (*string != '\0')
{
if (*string == '%' && *(string + 1) != '%')
{
std::cout << first;
string += 2;
printf(string, p...);
return;
}
std::cout << *string++;
}
}
aşağıdaki parametrelerle işlevi diyoruz?
printf(const char*, int, Params...);
ve
böylece, 10 bağımsız değişken içeren bir işlev çağrısı 10 farklı fonksiyonlara yol açacağı ise printf(const char*, double, Params...);
yaratılıyor. Derleyici bunu en iyi şekilde yapar mı?
Sadece OP için bir yorum: neden bu şaşırtıcı? Tek tipli bir regalr (parametre olmayan paket) şablonu için (C); on farklı beton türü ile kullanıldığında, on farklı şablon örneğine neden olacaktır. –