如何迭代可变参数模板类型(而不是参数)?

问题描述 投票:0回答:1

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

template<typename... T>
class Subscriber
{
    Subscriber()
    {
        // for(typename X: T)   <-- How to do this?
        // {
        //      PubSub.Subscribe<X>( [](auto data){ // do something with data} );
        // }
    }
}
c++ templates c++14 variadic-templates
1个回答
4
投票

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

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

在C ++ 11/14中,您可能会使用更详细的方式,例如:

((当前具有通用lambda的C ++ 14)

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.
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.