Могу ли я использовать вариативные шаблоны без использования параметров шаблона в качестве параметров функции?Шаблоны Variadic без функциональных параметров
Когда я использую их, он компилирует:
#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);
}
Но когда я не использую их, он не компилируется и жалуется на двусмысленности:
#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>();
}
К сожалению, классы I хотите дать, поскольку параметры шаблона не являются реальными (у них есть статические функции, которые вызываются внутри функции шаблона). Есть ли способ сделать это?
Если вам нужно * невычисленное * выражение данного типа, вы можете использовать 'станд :: declval()'. Работает для любого 'T', независимо от его конструктивности. –
Что касается того, почему версия без аргументов не работает: без аргументов обе перегрузки 'print' и 'print ' одинаково хороши, в то время как с аргументами 'print (3)' лучше совпадение, чем 'print (3, {}) '(где' {} 'означает« ничего »). Не использование перегрузок, как предлагает CatPusPus, является стандартным методом; и поскольку вы не выносите свои аргументы, это самое простое решение. –
Я собирался опубликовать ответ, но н.м. уже отправил его. – bames53