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

卡西夫·伊利亚斯

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

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

在您的示例中,在 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.
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章