DML 中是否有 C++:'模板<typename T>"的等效项?



对于这个模板,是否可以参数化uint32类型?

template test_t {
saved uint32 data;
}

我尝试使用param mytype = uint32,但没有工作。有没有别的办法?

DML没有内置对泛型的支持,但是您可以通过使用paramtypeof来模拟它们。然而,这确实有一些明显的缺点,通常是你在绝望时才会用到的东西。

下面是一个如何模拟泛型的示例,并演示了这样做的问题:
template test_t {
param data_type_carrier;
#if (true) {
saved typeof(data_type_carrier) data;
}
}
group test is test_t {
// safe as this expression is never evaluated
param data_type_carrier = *cast(NULL, uint32 *);
}

#if (true)可能会引起您的注意:这是一种防止DML试图使data成为模板类型的一部分的hack。模板类型是在顶层计算和构造的,所以对象局部参数在构造过程中不在作用域中:如果没有#if (true), DML将拒绝模板,抱怨data_type_carrier不在作用域中(这也适用于session)。由于data不是模板类型的一部分,这意味着您不能从test_t值访问它。

local test_t x = cast(test, test_t);
local uint32 y = x.data; // error
同样,您不能利用参数化类型声明共享方法或类型化参数。然而,无类型参数、非共享方法和子对象是合理的,并且由于DML不尝试将这些成员添加到模板类型中,因此不需要#if (true)hack来处理它们。

相关内容

  • 没有找到相关文章

最新更新