簡體   English   中英

如何迭代可變參數模板類型(不是參數)?

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

我正在編寫一個 class ,它需要可變數量的模板類型。 我需要為每種類型調用一個訂閱者,但請注意沒有實際的 arguments 傳遞給 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.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM