如何遍历 Variadic 模板类型(不是参数)?

How to iterate over Variadic template types (not arguments)?

我正在写一个 class,它需要可变数量的模板类型。我需要为每种类型调用订阅者,但请注意没有实际参数传递给 class。类似于:

template<typename... T>
class Subscriber
{
    Subscriber()
    {
        // for(typename X: T)   <-- How to do this?
        // {
        //      PubSub.Subscribe<X>( [](auto data){ // do something with data} );
        // }
    }
}

在您的示例中,在 C++17 中,您可以这样做:

template<typename... Ts>
class Subscriber
{
    Subscriber()
    {
        auto f = [](auto data){ /* do something with data*/ };
        (PubSub.Subscribe<Ts>(f), ...);
    }
}

在C++11/14中,你可能会使用更冗长的方式,例如:

(C++14 当前使用您的通用 lambda)

template<typename... Ts>
class Subscriber
{
    Subscriber()
    {
        auto f = [](auto data){ /* do something with data*/ };
        int dummy[] = {0, (PubSub.Subscribe<Ts>(f), void(), 0)...};
        static_cast<void>(dummy); // Avoid warning for unused variable.
    }
}