Variadic templates without function parameters

对着背影说爱祢 提交于 2019-12-05 03:11:30
template<class First> // 1 template parameter
void print()
{
    cout << 1 << endl;
}

#if 0
template<class First, class ... Rest> // >=1 template parameters -- ambiguity!
void print()
{
    cout << 1 << endl;
    print<Rest...>();
}
#endif

template<class First, class Second, class ... Rest> // >=2 template parameters
void print()
{
    cout << 1 << endl;
    print<Second, Rest...>();
}

Make it a type.

template <typename... Ts>
struct print_impl;

template <typename T>
struct print_impl<T> {
    static void run() {
        std::cout << 1 << "\n";
    }
};

template <typename T, typename... Ts>
struct print_impl<T, Ts...> {
    static void run() {
        std::cout << 1 << "\n";
        print_impl<Ts...>::run();
    }
};

template <typename... Ts>
void print() {
    print_impl<Ts...>::run();
}

int main() {
    print<int, int, int>();
    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!