提供 Variadic Template Pack 作为函数规范

Giving Variadic Template Pack as function specification

我正在尝试创建一个具有模板包特化(它没有参数)的函数,它会打印一条消息,直到函数特化使其打印其他内容的最后一条消息,然后停止。 因为我真的不好解释,这里我 post 我正在尝试做的代码:

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) 但我想知道如果没有函数参数这是否可能,我将总结我的问题:

提前致谢,如果您不明白与我的问题相关的内容,我将不胜感激,可以更好地解释它,抱歉我的英语不好。

是的,有可能。

但是考虑到 typename ... TT 是 "zero or more typenames",所以调用 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...>();
}