2607d,C++细节比不上d

cpp 复制代码
--- test.d
import std.stdio: writeln;

struct GVec(int N : 2, T) { T x = 0; T y = 0; }
struct GVec(int N : 3, T) { T x = 0; T y = 0; T z = 0; }
struct GVec(int N : 4, T) { T x = 0; T y = 0; T z = 0; T w = 0; }

alias GVec2(T = float) = GVec!(2, T);
alias GVec3(T = float) = GVec!(3, T);
alias GVec4(T = float) = GVec!(4, T);

void main()
{
    import gvec;
    GVec2!int x = GVec2!int(1, 2);
    foo(x);
}
--- gvec.d
import std.stdio: writeln;

struct GVec2(T) { T x, y; }
struct GVec3(T) { T x, y, z; }
struct GVec4(T) { T x, y, z, w; }

void foo(GVec2!int x) {
    writeln(x.x);
    writeln(x.y);
}

DGVec可以同时多次抽象使用.而C++是不行的.

cpp 复制代码
元<类 A>构 B{
    空 动作(){
        打印("f");
    }
};

元<动 A>构 B{
    空 动作(){
        打印("f");
    }
};
空 主(){
    B<整>a;
}

那个test.d要改成如下:

cpp 复制代码
import std.stdio: writeln;

import gvec;

struct GVec(int N : 2, T) { GVec2!T _data; alias _data this; }
struct GVec(int N : 3, T) { GVec3!T _data; alias _data this; }
struct GVec(int N : 4, T) { GVec4!T _data; alias _data this; }

void main()
{
    GVec2!int x = GVec2!int(1, 2);
    foo(x);
}
相关推荐
wuminyu8 小时前
JDK21解决虚拟线程IO阻塞原理剖析
java·linux·c语言·jvm·c++
MC皮蛋侠客8 小时前
TDengine C++ 系列(4):时序查询——窗口聚合、插值、连接与时序函数
大数据·c++·tdengine
junuo8 小时前
10_C++内存分区与动态内存管理
c++·编程语言
欧特克_Glodon9 小时前
OpenCV计算机视觉开发入门与实践<二>:图像噪声与图像处理
c++·图像处理·opencv·计算机视觉
键盘会跳舞9 小时前
C++:函数对象与 std::function 源码级深度拆解——泛型算法的策略内核与可调用对象统一封装
c++·算法·仿函数
Augustzero9 小时前
为什么高性能调度器都在“偷任务”?从无锁队列看懂工作窃取
c++·后端
(Charon)9 小时前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表
(Charon)9 小时前
【C++】:使用 mutex + deque 实现一个简单的 LockedQueue
开发语言·c++
星轨初途9 小时前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode
有点。10 小时前
C++广度优先搜索(二)-练习题
c++·算法·宽度优先