02 2023 档案
摘要:原文 @body("user") @errorDisplay auto postUsers(User _user, string _error) //变成 auto postUser(@body User user, @errors Errors errors) 而: @path("/users/:
阅读全文
摘要:原文 上一篇 这是之前用D编写RISC-V裸机文章的后续.这一次,在实际硬件上运行代码.使用VisionFive2板,这是最近发布的RISC-V的SBC;带4个(SiFiveU74)应用内核,时钟频率为1.5GHz,1个(SiFiveS7)监听器内核.U74和S7内核间主要区别是S7内核没有MMU,
阅读全文
摘要:构 A{ 元<类 T>静 空 g(串&a){ T::h(a); 打印(a,"a"); } }; 构 B:公 A{ 静 空 h(串&a){ 打印(a,"b"); } }; 空 主(){ 串 b{"啊"}; B::g<B>(b); } 如果,用私/保护是访问不了的!
阅读全文
摘要:原文 下一篇 用D编写裸机RISC-V应用 这篇文章展示,如何用D编写,目标为RISC-VQEMU模拟器的程序裸机"你好".项目 为什么是D? 我最近一直在用C编写裸机代码,我有点对C缺乏特征感到沮丧.D引入了叫betterC的模式(基本上禁止了D运行时的所有语言功能).使得D裸机编程大致与C一样.
阅读全文
摘要:原文 这里我创建了SLF4D,它提供了常见日志记录接口,及可插件化的架构,以允许第三方处理应用中记录器生成的日志消息. import slf4d; void main() { auto log = getLogger(); log.info("信息"); log.errorF!"错误消息: %d"(
阅读全文
摘要:#include <常用> #include "注册子类.cpp" 构 D{}; 构 E:公 D{ 串 a; }; 构 A{ 单 无序映<串,整>记; 元<类 B,类...T>静 空 初化(){ 类名序<B,T...>(记); 打印("A"); } 静 整 取记(串&a){ 查找映中(记,a,"不存
阅读全文
摘要:构 A:公 分发静{ 静 空 g(串&a){ 打印(a); } 静 空 f(串&a){ 打印(a); 打印(a); } 静 空 h(串&a){ 打印("h"); } 静 空 aa(串&a){ 串 e{"h"};分发<f,g,h>(e,a);//这里 }//e分发串,f,g,h与们的匹配 };//由e
阅读全文
摘要:构 A{ 单 向量<串>们; 静 空 初化(){ 串 a{"0"},b{"啊"},c{"哈哈"}; 压多(们,a,b,c); } }; 构 B:公 A{ 静 空 g(串&a){ 打印(a); } 静 空 f(串&a){ 打印(a); 打印(a); } 静 空 h(串&a){ 打印("h"); } 静
阅读全文
摘要:行标记是GCC的扩展,而不是标准: 微软预处理器也会生成#line行标记. ImportC必须用除gcc外的C预处理器的输出.我对此无能为力.建议gcc不要运行这些测试. ^Z指示到达文件尾. ImportC,作为扩展,允许前向引用.因为它依赖D的语义分析,这是很自然的. 我建议gcc忽略该测试.
阅读全文
摘要:图片为100%的宽,此时如果高度不对,就会错误的拉伸. 那么怎么办?保持宽度100%,去掉高度属性,就可以了.
阅读全文
摘要:原文 D中探险推导属性 推导属性是D编程的重要组成部分.D有大量属性,其中四类属性与函数相关: 1,内存安全,包括,@safe,@system,和@trusted. 2,@pure,函数纯度,表明函数不能访问共享或全局数据. 3,nothrow,函数是否可抛异常(注意这不包括错误或其他可抛子类),在
阅读全文
摘要:原文 如果理解正确,如下: struct S { char[16384] array; } 然后用它,必然会导致创建和链接一个S.init,从而导致二进制大小膨胀16kb.是这样吗? 是的.但,全零就不是这样了.至少对TypeInfo.initializer,它指向用指示要写入的零个数的数组大小的n
阅读全文
摘要:原文 提示是WebFreak的贡献.感谢他们写这篇文章! 有很多方法可自定义toString方法.方法不完全是D的一部分,而是Phobos中的约定: 用.to!string时,会如下: 1,对象到串的转换调用对象的toString,如果对象为null,则返回"null"串. 2,如,覆盖Object
阅读全文
摘要:原文 import std.traits; @safe void main() { enum attr1; enum attr2; struct A { @attr1 void foo(); @attr2 void foo(int a); } pragma(msg, getUDAs!(A.foo,
阅读全文
摘要:C++先天优势,就是多继承,所以要利用好. 你可以这样,基类,先搭个框架: 构 B:公 A,公 C{ 元<类 T>静 空 动作(向量<串>&文){ } }; 动作的类 T中的T为继承类.A,C都是接口.要求实现. 然后继承类这样: 构 G:公 E,公 D,公 F{}; //组合起来的. G类是用多继
阅读全文
摘要:参考 module foo.bar; class C { this() { x = 10; } int x; } void main() { auto c = cast(C)factory!(foo.bar)("C"); assert(c !is null && c.x == 10); } 增加co
阅读全文
摘要:避免循环依赖:给定A导入B,B导入A: 1.把A和B分开,把公共部分放在C中,静态构造器放在C中,我没有数学证明,但我很确定可用A<=C和B<=C来替换A<=>B,事实上,Go要求它(禁止循环导入). 2.笨方法(但不需要重构)是:AB提供构造器的定义,C静态构造器调用它们. extern(C) v
阅读全文
摘要:构 A{ 单 无序映<串,串>g; 静 空 bb(串&a){ 可为逗映(a,g); } }; 空 f(){ 串 a{基路径("替换标点.txt")}; A::bb(a); A::bb(a); 打印(A::g.大小()); } 空 主(){ f();f(); } A::bb只调用了一次!错了,不止一次
阅读全文
摘要:原文 化简为: void f() { int i; bool g(int I)() { static foreach(j; 0..11) {//11为类型的枚举成员数 i++; return g!j(); } } g!0; } 根据循环长度,调用"checkEscapingSiblings"数呈指数
阅读全文
摘要:构 A{ 单 向量<串>二,三; }; 构 B:公 A{ 静 空 f(){ 静 串 a{"```cpp"},b{"```"}; 压(二,a);压列(二,三);压(二,b); } }; 构 C:公 A{ 静 空 g(){ 静 串 a{"aaa"},b{"bb"}; 压(二,a);压(三,b); } }
阅读全文
摘要:原文 myFile.seek(-1, SEEK_END); ubyte c[1]; myFile.rawRead(c[]); if(c[0] == '\n') // 新行结尾. 基于上个答复: module test; @safe: import std; void main() { File my
阅读全文
摘要:构 A{ 单 向量<串>们; 静 空 初化(){ 串 a{"啊"},b{"呀"}; 压多(们,a,b); } };//作为插件用. 构 B:公 A{ 元<类 T>静 空 动作(向量<串>&a){ 初化();打印大小(们,a);T::g(); }//T为子类. }; 构 C:公 B{ 静 空 g(){
阅读全文
摘要:原文 已允许在UDA中放类型,但解析器会拒绝直接编写的基本类型,而要用别名. alias Tint = int; @Tint void f(); 此外,模板实例化中,可不用带括号的简单文本(如:foo!"arg"),用作属性时需要括号: @("测试") unittest { } 现在,可在"foo!
阅读全文
摘要:原文 string ta(string s) { return s ~ "1"; } template ta(string s) { enum ta = .ta(s); } void main() { import std.stdio; writeln(ta("a"), ' ', ta!"b");
阅读全文
摘要:原文 import std; auto deduplicate(R)(R input)if (isInputRange!R) { alias Unit = void[0]; enum unit = Unit.init; Unit[ElementType!R] seen; return input.f
阅读全文
摘要:dmd常用命令行(选项)帮助 dmd -h命令行帮助: dmd [<option>...] <file>... dmd [<option>...] -run <file> [<arg>...] 其中: <file>为D源文件 <arg>为运行结果程序时,要传递的参数 注意,以下用:代替了|,避免乱码
阅读全文
摘要:i_view64.exe /filelist=文件名.txt /bpp=1 /convert=$N.jpg
阅读全文
摘要:链接:https://pan.baidu.com/s/1RGJH4u1mKeHDt5F09VTdBg 提取码:bezq
阅读全文
摘要:对象工厂替代方案 一般,需要无需用模块构造器触发d运行时的挑剔循环检测的方法来注册工厂.很多时候,混合模块构造器正是想要方法,但它有全局全开或全闭的循环检测算法. 要全局关闭它,请在Main文件中,添加以下代码行: extern(C) __gshared string[] rt_options =
阅读全文
摘要:因为正在弃用Object.factory(),这里,因此需要方便的替代方案. TraitsExpression: __traits ( getModuleClasses [, TraitsArgument] ) 特征参数是模块名或全限定导入. 如果未指定TraitsArgument,则默认为当前模块
阅读全文
摘要:原文 module lexer; import std.stdio; import token; class Lexer() { string sourceText; char currentChar; int charIndex; int line; int column; this(string
阅读全文
摘要:原文 Digger抱怨是复制构造器的原因. 是的;它适合postblit和按值复制的构造器,但不适合按引用使用的复制构造器. 化简用例: struct Array { void opSliceAssign(Foo) {} void opSliceAssign(Foo, size_t, size_t)
阅读全文
摘要:原文 void main() { import std.conv : to; import std.algorithm : sort; import std.stdio : writeln; auto foo = ["VXE":8, "BZP":5, "JLC":2]; string[] order
阅读全文
摘要:原文 version (assert) int foo; void test() in (!foo) {} void main() { test(); } 用'-release'生成时,不会编译进'foo',编译失败,并显示: 错误:未定义`'foo'`标识. 在发布版本中,不删除合约吗? 删除了合
阅读全文
摘要:原文 import std.meta : AliasSeq; template pickArgs(size_t totalElements, size_t argsPerElement, size_t whichElement, args...) { alias pickArgs = AliasSe
阅读全文
摘要:原文 alias VErr = char*; @safe: ref char* front_p(return scope char** p) { return *p; } __gshared char* g; void main() { char* _errors; g = front_p(&_er
阅读全文
摘要:原文 进一步化简: alias VErr = char*; ref front_r(ref VErr r) { return r; } ref front_p(VErr* p) { return *p; } ref front_s(VErr[] s) { return s[0]; } VErr g;
阅读全文
摘要:原文 即,抱怨的是构建和测试的顺序. 有个测试包来测试编译器.数百个此测试.每个测试都是独立的,只有几行长.也即,已化简和隔离了它们.(大多数来源是已修复的漏洞.),当某个测试失败时,一般可直接找到问题. 但测试包的运行方式是: 1.构建编译器 2.用它编译druntime,砰,编译器崩溃了,现在你
阅读全文
摘要:原文 import std.meta : AliasSeq; //`"args"`的前半部分是"第一个参数",后半是第2个 // 可生成多组. template staticMap2(alias fun, args...) { alias firsts = args[0 .. $ / 2]; ali
阅读全文
摘要:原文 别名参数的约束检查是否编译时,它实例化函数字面模板.这会触发用户函数字面中的在IFTI实例化它之前无法检测到的潜在错误. 这些错误随后会导致约束失败,因为不能编译字面.约束随后会从要用的候选列表中删除匹配模板. void f(alias a)() if (is(typeof(a()))) {}
阅读全文
摘要:原文 const std::vector<int> v1{1, 2, 5, 5, 5, 9}; const std::vector<int> v2{2, 5, 7}; std::vector<int> diff; std::set_difference(v1.begin(), v1.end(), v
阅读全文
摘要:这里为用法 主要原因是,C++的函数模板功能不够强大,不能单独使用函数模板名,那么就只有借助C++的静态构函数模板来增强它!如: 构 XX基{ 元<类 T>静 空 合并(向量<串>&一,串&名){ T::合并(一,名); } }; 这里,就可以用XX基的子类作为模板参数来提高抽象层级! 要求必须是静
阅读全文
摘要:构 A{ 元<类 T>静 空 g(串&a){ T::h(a);打印(a,"a"); } }; 构 B:公 A{ 静 空 h(串&a){ 打印(a,"b"); } }; 空 主(){ 向量<串> a{"啊","呼","呀"}; 批向量3<&B::g<B>>(3,a);//必须要有啊. //B::g<B
阅读全文
摘要:原文 对: byte[3][3] myArr; 可: myArr[0] = 5; 并有了: 5,5,5 0,0,0 0,0,0 可类似赋值列吗?myArr[][0] = 5没用. 所有的东西,都在内存中且是并排的,示例(类似数组)涵盖了该问题: import std.stdio; void main
阅读全文