我有一個類似的問題
在編譯時生成一個零序列
但是,就我而言,我沒有要擴展的包。情況是這樣的:
template<size_t N>
void foo()
{ bar(T{}, ..., static_cast<T>(1)); }
有N - 1T{}:s 后跟一個。
可能會發生T不可用作非型別模板引數的情況。與鏈接的帖子相比,有兩個不同之處
- 在鏈接的帖子中,已經有一個引數包可以依賴
- 在鏈接的帖子中,假設所有引數都是整數
我可能會使用需要 C 20 的解決方案
uj5u.com熱心網友回復:
你自己生成序列
#include <utility>
template<std::size_t N>
void foo(){
[&]<std::size_t...I>(std::index_sequence<I...>){
bar((I,T{}) ... , static_cast<T>(1));
}(std::make_index_sequence<N-1>());
}
uj5u.com熱心網友回復:
你可以N變成std::index_sequence<0, .., N-1>with std::make_index_sequence,然后你可以根據需要擴展你的包:
template<size_t N>
void foo()
{
[]<std::size_t...Is>(std::index_sequence<Is...>){
bar(T{(static_cast<void>(Is), 0)}..., static_cast<T>(1));
} (std::make_index_sequence<N - 1>());
}
演示
模板 lambda 是 C 20,如果你不能使用它,你必須做一個類似的模板幫助函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511329.html
標籤:C 参数包
下一篇:if分支是否比else分支快?
