Şablon parametrelerini işlev parametreleri olarak kullanmadan variadic şablonları kullanabilir miyim?İşlevsel parametreler olmadan Variadic şablonları
#include <iostream>
using namespace std;
template<class First>
void print(First first)
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print(First first, Rest ...rest)
{
cout << 1 << endl;
print<Rest...>(rest...);
}
int main()
{
print<int,int,int>(1,2,3);
}
Ama onları kullanmadığınızda, bu derleme değil ve bir belirsizlik hakkında şikayet:
Bunları kullandığınızda, derler
#include <iostream>
using namespace std;
template<class First>
void print()
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print()
{
cout << 1 << endl;
print<Rest...>();
}
int main()
{
print<int,int,int>();
}
Maalesef sınıfları I şablon parametrelerinin örneklenemez olması (şablon işlevinin içinde çağrılan statik işlevler vardır) olarak vermek istiyorum. Bunu yapmanın bir yolu var mı?
'std :: declval()'. Yapılandırılabilir olsun ya da olmasın, herhangi bir “T” için çalışır. –
No argüman versiyonunun neden çalışmadığı: Argümanlar olmadan, her iki aşırı yüklenme baskı 've' print 'eşittir, argümanlar ise baskı (3)' baskı 'dan daha iyi bir eştir. (3, {}) '(burada {}," hiçbir şey "anlamına gelir). CatPusPus'un öne sürdüğü gibi aşırı yüklenmeler kullanılmamak, standart yöntemdir; ve siz argümanlarınızı çıkarmıyorsunuz, çünkü bu en basit çözümdür. –
Bir cevap gönderecektim ama n.m. zaten gönderdi. – bames53