问题标签 [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 回答
2904 浏览

scala - 在 scala 中定义 Logging 特征时出现问题

似乎 scala 中常见的日志记录模式是使用与具体类混合的 Logging 特征(参见 Liftweb、akka 等开源项目)。

像这样的东西:

这正是我正在使用的正确知道,但由于这种模式,我遇到了一个问题。实际上,如果 Logging 特征与派生类混合,则 Logger 将与最派生类的名称一起使用。

这是一个澄清自己的例子:

当我运行这个程序时,我得到:

代替:

有没有人找到解决这个问题的方法?

0 投票
2 回答
590 浏览

scala - 如何在编译时进行类型检查?

TraversableOnce中,有一个sum方法只有在包含的类型是时才可用Numeric(否则它不会编译)。我想知道这是否可用于其他情况(以避免运行时检查)。

特别是我们有两个特征 A 和 B 的情况。我们希望有一个方法f,只有当对象继承 A 和 B 时才能使用但如果它只扩展其中一个,则不能。我不想再做一个trait AB extends A with Bf如果不是两个特征都被继承,我只想无法使用。

编辑:解决方案,感谢@Aaron Novstrup

现在在mainb.f不编译。好的

编辑 2:将第 [1] 行更改为 [2] 反映了@Aaron Novstrup 回答的变化

编辑 3:不使用self@Aaron Novstrup 在答案中的反映变化

0 投票
2 回答
4234 浏览

c++ - What is the purpose of allocator_traits in C++0x?

Why isn't standard C++03 interface for querying member types for allocators used in C++0x? What are the use cases where member types are not sufficient?

0 投票
3 回答
772 浏览

c++ - 实现具有自定义行为的字符串类

在我们的一个班级中,先生说模板允许自定义类的行为,然后他给出了字符串类的示例,只需几行代码,我们就可以从 STL 自定义字符串类,例如,我们可以让它处理 ' a'和'z'一样,'b'和'y'一样,'c'和'x'一样等等。相似的'A'和'Z'相同等。

“abc” == “zyx” 为真;
“Abc” == “zyx” 为假;
"Abc == "Zyx" 为真;

ETC

我正在考虑实现这样的字符串类,但我不能这样做。我们如何使用模板实现这样的字符串类?

0 投票
4 回答
3038 浏览

c++ - 纯粹作为库实现的 C++ is_lambda 特征是不可能的吗?

我有一个关于 C++0x lambdas 的问题。在我的代码中,了解给定类型是否是 C++0x lambda 表达式的类型会很有帮助。举个例子:

将 lambda 表达式与函数和成员函数类型区分开来相当容易。函子是另一回事。

我在这里看到的问题是根据即将到来的 C++0x 标准定义 lambda 表达式;唯一必须定义的是公共呼叫操作员。然而,对于函子也是如此;测试调用运算符的存在不足以区分 lambda 表达式和仿函数。此外,如果函子的运算符存在,则会发生编译器错误,因为 SFINAE 不适用。这什么时候发生?函子的调用操作符可以被模板化。所以,这样的代码:

将适用于具有非模板化调用运算符的 lambda 表达式和仿函数,并为模板化调用运算符生成编译器错误。

我相信is_lambda < >只能使用内在编译器功能创建特征。您是否看到了如何实现此特征的方法?

0 投票
3 回答
698 浏览

c++ - 检测嵌套类型的 const-ness

通常,如果我需要检测一个类型是否是const我只需使用boost::is_const. 但是,在尝试检测嵌套类型的 const 时遇到了麻烦。考虑以下特征模板,它专门用于 const 类型:

问题是boost::is_const似乎没有检测到这traits<const T>::reference是一种const类型。

例如:

这输出:false false

为什么不输出false true

0 投票
1 回答
699 浏览

c++ - 有没有办法使用特征使 pos_type 和 off_type 成为 int64_t ?

我试图了解特征是什么,例如typedef typename traits_type::off_type off_typeGNU 实现中的表达式fstream

当我处理大于 2/4 GB 的文件时出现了这个问题。我发现使用适当的标志重新编译 STL 库通常可以解决大文件问题。

0 投票
2 回答
1160 浏览

scala - 命名为 Scala 的自类型仍然会影响“this”?

阅读这些 帖子让我觉得我至少在某种程度上理解了自我类型。

所以我创建了一个按预期失败的示例:

自我类型的“this”遮蔽了 B 的“this”——看起来很奇怪,但很有意义。

那么,给自我类型起一个不同的名字似乎是明智的。我这样做了,很惊讶:

还是有阴影???

更改“本地”变量的名称可以编译,这是有道理的:

(并且可以选择使用 self 类型名称来明确使用哪个“v”。)

好的。这意味着以下应该失败?

嗯?这是哪个?:-(

那么......命名自我类型有什么意义吗?无论如何,“这个”似乎最终都被遮蔽了。

或者这是范围规则的边缘情况,其中自我类型的“this”优先于特征的“this”——并且应该避免对相关特征中的事物使用相同的名称?

0 投票
4 回答
6924 浏览

c++ - 此类的 C++ 特征示例

我已经有一段时间没有使用 C++ 的高级特性了,并且正在刷新我的 C++ 知识。话虽如此,特征和基于策略的编程的概念是我从未真正设法理解的东西。

我想改变它。我正在编写一个通用容器。我想强制执行一个策略,即容器将只存储从特定基类派生的类。这是因为当尝试访问向量边界之外的项目时,容器会返回一个无效对象(而不是抛出)。

我将如何使用特征来限制这个通用容器只包含类“ContainerItem”的子类?

0 投票
3 回答
4024 浏览

scala - 实现支持方法链的 Scala trait 的最佳实践

我想制作一个特征,为类添加一些属性并使链接方法成为可能。在 Scala 2.8.1 中测试。

在这种情况下,最常见的做法是什么?(首选类型安全的方式)