2312d,把alloca注入调用者域

原文

有以下技巧.因为无法推导长度,因此不理想,但这成功地把alloca注入到调用者域中.

cpp 复制代码
import core.stdc.stdlib:alloca;
import std.range:ElementType;
import core.lifetime:moveEmplace;
struct VLA(T,alias len){
    T[] storage;
    this(R)(R initializer,return void[] storage=alloca(len*T.sizeof)[0..len*T.sizeof]){
        this.storage=cast(T[])storage;
        foreach(ref element;this.storage){
            assert(!initializer.empty);
            auto init=initializer.front;
            moveEmplace!T(init,element);
            initializer.popFront();
        }
    }
    ref T opIndex(size_t i)return{ return storage[i]; }
    T[] opSlice()return{ return storage; }
}
auto vla(alias len,R)(R initializer,void[] storage=alloca(len*ElementType!R.sizeof)[0..len*ElementType!R.sizeof]){
    return VLA!(ElementType!R,len)(initializer,storage);
}
void main(){
    import std.stdio,std.string,std.conv,std.range;
    int x=readln.strip.to!int;
    writeln(vla!x(2.repeat(x))[]);
}
相关推荐
fqbqrr17 天前
2412d,d的6月会议
d
fqbqrr1 个月前
2411d,右值与移动
d
fqbqrr6 个月前
2407d,D2024三月会议
d
fqbqrr9 个月前
2403d,d的com哪里错了
d
fqbqrr1 年前
2402d,d的变参
d
fqbqrr1 年前
2401d,ddip1027如何支持sql
d
fqbqrr1 年前
2401d,讨论d串滑动参数
d
fqbqrr1 年前
2312d,D语言单元测试等
d
fqbqrr1 年前
2312d,d语言作为胶水,用C++调用rust
c++·rust·d