簡體   English   中英

用Pattern初始化`constexpr`數組

[英]Initializing `constexpr` Array with Pattern

我想使用使用可變參數模板參數生成的模式來初始化constexpr數組。 為簡單起見,請考慮使用類型列表的大小初始化constexpr unsigned靜態數組的問題,例如unsigned, short, char, int, long 我該怎么做,以便所有計算都在編譯時完成? 我需要該解決方案與C ++類型系統配合使用,因此我不能使用宏。

我能想到的最好結果如下所示, 但是使用 g++ -std=c++11 -Wall -Ofast -S (使用g ++ 4.7)進行編譯以及對程序集的檢查清楚地表明,這些值在運行時被壓入堆棧。 有任何想法嗎? 並且工作正常

如果我能以某種方式告訴擴展n +1關於擴展n,那么使用如下數組初始化器將起作用。

static constexpr unsigned foo[] = { compute_element<Args>::value... };

編輯:等等,沒關系,我有個腦袋。 上面的行工作正常...

這是 代碼 答案

#include <iostream>

template <class... Args>
struct foo
{
    static constexpr unsigned bar[] = { sizeof(Args)... };
};

int main()
{
    std::cout << foo<unsigned, short, char, int, long>::bar[2] << std::endl;
    return 0;
}

非常感謝您的寶貴時間!

這是答案。 請記住,由於C ++的限制,我認為這只能在編譯時完成,以創建與可變模板參數包大小相同的數組。

#include <iostream>

template <class... Args>
struct foo
{
    static constexpr unsigned bar[] = { sizeof(Args)... };
};

int main()
{
    std::cout << foo<unsigned, short, char, int, long>::bar[2] << std::endl;
    return 0;
}

暫無
暫無

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

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