Я пытаюсь создать функцию, которая имеет специализированную специализацию шаблона (у нее нет параметров), и она печатает сообщение до тех пор, пока последняя специализация не сделает печать другим. стоп. Как я действительно плохо объяснить, здесь я выкладываю код, что я пытаюсь сделать:Предоставление пакета шаблонов Variadic в качестве функции спецификации
template <typename T>
constexpr void UpdateStuff()
{
std::cerr << "I am the last one :D" << std::endl;
}
template< typename T ,typename... TT>
constexpr void UpdateStuff()
{
std::cerr << "I am NOT the last one :D";
UpdateStuff<TT...>();
}
int main()
{
UpdateStuff<int,double>(); // Should only print text twice
std::cin.get();
return 1;
}
В первой ноты, я знаю, это не работает, UpdateStuff<TT...>();
это дает Неоднозначный вызов к перегруженной функции, мне удалось заставить ее работать, задав параметры UpdateStuff()
, такие как UpdateStuff(T first, TT... second)
, и специализация только одна UpdateStuff(T first)
, но я хочу знать, возможно ли это без параметров функции, я дам резюме моих вопросов:
- I Dont полностью понять, почему
UpdateStuff<TT...>();
не работает, если TT является толькоdouble
во время компиляции, почему он не использует первую функцию? - Возможно ли выполнить то, что я пытаюсь выполнить без параметров функции?
Заранее благодарим за это, и если вы не понимаете что-то, связанное с моим вопросом, я был бы благодарен, чтобы объяснить это лучше, и извините за мой бедный английский.
Я предполагаю, что 'UpdateStuff()' будет соответствовать обоим перегрузкам 'функций UpdateStuff' как' TT' будет выведен там как пустой пакет ... –