问题标签 [traits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4075 浏览

scala - 性状混合的限制

我想拥有只能混合指定特征的类:

在 Scala 中可以做到这一点吗?

升级版:

我想以一种Hero限制客户端程序员在扩展类时混合特定特征(Lawful/ LNeutral/ChaoticGood/ Neutral/ Evil)的方式定义一个Hero类。我想找到一些其他的可能性来限制/约束这样的客户端代码。

0 投票
1 回答
322 浏览

scala - 组成独立的特征

给定两个独立的特征:

如果我尝试定义一个混合这两个特征的类,例如:

我得到一个编译器错误:

现在假设 T1 和 T2 是独立开发的,因此没有覆盖,因为它们没有覆盖任何东西。那么如何定义 C 呢?像这样:

?

0 投票
2 回答
983 浏览

c++ - 未定义的模板方法技巧?

我的一位同事告诉我,他和他的团队一起使用的一个小设计让我心潮澎湃。这是一种特征类,他们可以以一种极其解耦的方式进行专业化。

我很难理解它是如何工作的,而且我仍然不确定我的想法,所以我想我会在这里寻求帮助。

我们在这里谈论的是 g++,特别是 3.4.2 和 4.3.2 版本(似乎两者都适用)。

这个想法很简单:

1-定义接口

2-定义一个类,并在源文件中专门为这个类提供接口(定义它的方法)

3-使用起来也很简单:

如果没有翻译单元定义Interfacefor的特化,则它是一个未定义的符号Special

现在,我原以为这需要export关键字,据我所知,该关键字从未在 g++ 中实现过(并且只在 C++ 编译器中实现过一次,考虑到他们花费的时间和精力,它的作者建议任何人不要这样做)。

我怀疑这与链接器解析模板方法有关...

  • 你以前遇到过这样的事情吗?
  • 它是否符合标准,或者您认为这是一个幸运的巧合?

我必须承认我对这个结构很困惑......

0 投票
3 回答
1688 浏览

scala - 如何获取在指定类中混合的特征列表?

还有更具体的例子:

如何检查扩展特征 A 的特征(可以从 0 到多个)在指定类中混合?

0 投票
2 回答
6568 浏览

scala - Scala:获取特征混合的类的名称

给定一个类的实例,我们显然可以返回它的名称:

但是这种方式使用反射,对于AClass. 可以为每个班级做一次同样的事情吗?

想到的一种解决方案是将其混合到伴随对象而不是类本身中。

0 投票
2 回答
2912 浏览

c++ - 获取没有显式特征的整数模板参数的有符号/无符号变体

我希望定义一个模板类,其模板参数将始终为整数类型。该类将包含两个成员,一个是 type T,另一个是 type 的无符号变体T——即 if T == int, then T_Unsigned == unsigned int。我的第一直觉是这样做:

但它不起作用。然后我考虑使用部分模板专业化,如下所示:

只要您UnsignedType每种整数类型进行部分专业化,这就是有效的。这是一些额外的复制粘贴工作(斜线明智地使用宏),但可以使用。

但是,我现在很好奇 - 是否有另一种方法可以确定整数类型的有符号性和/或使用类型的无符号变体,而不必手动定义每个类型的 Traits 类?或者这是唯一的方法吗?

0 投票
4 回答
190 浏览

c++ - 关于模板类型的 C++ 设计问题

我有一个模板类

对于要替换 T 的类型,它必须满足许多要求:例如 get_id()、int data() 等。

显然,没有一个基本类型(POD)是可替代的。我可以提供的一种方法是通过提供这些功能的 POD 的包装器。这是一种可以接受的方式吗?

另一种方法是将模板更改为:

在 MyContainerClass 中,在 T 对象上调用 traits::data() 而不是 data()。我会专攻traits<int>, traits<const char *>等等。

这是好设计吗?如何设计这样的特征类(完全静态方法或允许继承)?或者包装类是一个很好的解决方案?

还有哪些其他选择?

0 投票
3 回答
1761 浏览

c++ - C++ 特征问题

我有一个模板类

在大多数情况下,我依靠编译器让我用类型代替 Data。我在 Data 类型的对象上调用方法 foo()、goo(),所以我替代的东西需要提供。

我现在需要用 int 和 string 替换我的 Data 类型。我不想专门化,因为这个类已经太大了,需要专门化每种方法(只需少量代码更改)。

我的选择(如果还有更多,请告诉我)

1) 我可以提供围绕 int 和 string 的包装类,它们实现了 foo()、goo() 等方法

2) 提供一个特征类特征,该特征在提供 foo()、goo() 的类的对象上调用 foo() 或 goo()(这些是我目前的可替代类),并将这些类专门用于 int 和 string。

问题

1) 1 与 2 的相对优点是什么?

2)我的特征类将具有静态方法。特征类也可以具有非静态方法吗?我看到大多数特征类在 STL 中定义常量。

3) 我是否将特征类设为全局,还是应该将它们作为 C 类的模板参数传入?

0 投票
1 回答
160 浏览

smalltalk - 如何判断一个类是否使用 Trait

如果我有一些类使用但其他类不使用的特征,我如何测试对象以查看它是否是使用该特征的类的实例?我想要的是类似于 isMemberOf: 或 isKindOf: 但对于 Traits。

0 投票
1 回答
111 浏览

c++ - 模板化类型的 C++ 模板特化

我希望通过使用 BOOST_STATIC_ASSERT 来帮助我的一些模板化代码的用户,让他们知道他们使用的不兼容类型具有比当前使用不兼容类型生成的怪物更简单的编译错误消息。

这个例子有点太复杂了,无法在这里重现,但希望这能抓住我想要的本质:

我的问题是如何格式化最后一行,一个“模板模板”?