gpt4 book ai didi

c++ - 可变参数模板的无递归扩展到数组访问

转载 作者:行者123 更新时间:2023-12-01 23:31:01 25 4
gpt4 key购买 nike

考虑以下非类型可变参数模板函数:

template <typename dummy = void>
void write_at_offsets(volatile char *p) {
}

template <size_t OFF, size_t... OFFs>
void write_at_offsets(volatile char *p) {
p[OFF] = 1;
write_at_offsets<OFFs...>(p);
}

它使用递归的方法在模板参数包中指定的偏移量处写入一个 1。

是否可以在不使用 C++11 中的递归的情况下简洁地编写此代码,例如,一次性展开整个包?

最佳答案

您可以使用 fold 表达式(自 c++17 起),在 index_sequence 中传递偏移量:

template<size_t ... Indices>
void foo(std::index_sequence<Indices...>,volatile char* p){
( (p[Indices] = 1),... );
}

int main(){
char* p = new char[3];
foo(std::index_sequence<0,1,2>(),p);

C++11 使用逗号表达式 (Calculation,0) 创建了由 0 填充的假数组:

template<size_t ... Indices>
void foo(char* p, const int val){
int fake[] = { (p[Indices] = val,0)... };
// cast fake to void to prevent compiler warning present
}

int main(){
char* p = new char[3];
foo<0,1,2>(p,48);

关于c++ - 可变参数模板的无递归扩展到数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com