Templates 给出可变模板包作为功能规范
我试图创建一个具有模板包专门化(它没有参数)的函数,并打印一条消息,直到最后一个函数专门化使其打印其他内容,然后停止。 由于我解释得很糟糕,我在这里发布了我试图做的代码:Templates 给出可变模板包作为功能规范,templates,c++11,metaprogramming,variadic-functions,variable-templates,Templates,C++11,Metaprogramming,Variadic Functions,Variable Templates,我试图创建一个具有模板包专门化(它没有参数)的函数,并打印一条消息,直到最后一个函数专门化使其打印其他内容,然后停止。 由于我解释得很糟糕,我在这里发布了我试图做的代码: template <typename T> constexpr void UpdateStuff() { std::cerr << "I am the last one :D" << std::endl; } template< typename T ,typename...
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;
}
模板
constexpr void UpdateStuff()
{
是的,这是可能的
但是考虑到typename…TT
是“零个或多个typename”,所以调用UpdateStaff()
两个版本的UpdateStaff()
都是可以的
通过示例,您可以在非最终版本中强制第二种类型;类似于
template <typename T1, typename T2, typename... TT>
constexpr void UpdateStuff()
{
std::cerr << "I am NOT the last one :D";
UpdateStuff<T2, TT...>();
}
模板
constexpr void UpdateStuff()
{
我的猜测是,UpdateStuff();
将匹配UpdateStuff
函数的两个重载,因为TT
将被推断为一个空包。。。