我正在尝试创建一个具有模板包专业化的函数(它没有参数)并打印一条消息,直到最后一个函数专业化使它打印其他内容并停止。由于我真的很难解释,在这里我发布了我正在尝试做的代码:
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)
但我想知道这是否可能没有函数参数,我将总结一下我的问题:
- 我不完全理解为什么
UpdateStuff<TT...>();
不起作用,如果 TT 只是double
在编译时,为什么它不使用第一个函数? - 是否可以在没有函数参数的情况下完成我想要完成的工作?
在此先感谢您,如果您不理解与我的问题相关的内容,我将不胜感激能更好地解释它,并为我糟糕的英语感到抱歉。