我正在尝试创建一个具有模板包特化的函数(它没有参数)并且它会打印一条消息,直到最后一个函数专门化使其打印其他内容,然后停止。 因为我真的很难解释,在这里我发布了我正在尝试做的代码:
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...>();
它会产生对重载函数的模糊调用,我已经设法通过赋予函数{{ 1}}参数如UpdateStuff()
和专精只有一个UpdateStuff(T first, TT... second)
但我想知道如果没有函数参数这是可能的,我会给出我的问题摘要:
UpdateStuff(T first)
不起作用,如果TT在编译时只是UpdateStuff<TT...>();
,为什么它不使用第一个函数?提前致谢,如果你不理解与我的问题有关的事情,我会很高兴能够更好地解释它,并为我糟糕的英语道歉。
答案 0 :(得分:0)
是的,这是可能的。
但请记住,typename ... TT
是“零个或多个类型名称”,因此调用UpdateStaff<double>()
两个版本的UpdateStaff()
都可以。
例如,您可以在非最终版本中强加第二种类型;像这样的东西
template <typename T1, typename T2, typename... TT>
constexpr void UpdateStuff()
{
std::cerr << "I am NOT the last one :D";
UpdateStuff<T2, TT...>();
}