问题标签 [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.
scala - 在 scala 中定义 Logging 特征时出现问题
似乎 scala 中常见的日志记录模式是使用与具体类混合的 Logging 特征(参见 Liftweb、akka 等开源项目)。
像这样的东西:
这正是我正在使用的正确知道,但由于这种模式,我遇到了一个问题。实际上,如果 Logging 特征与派生类混合,则 Logger 将与最派生类的名称一起使用。
这是一个澄清自己的例子:
当我运行这个程序时,我得到:
代替:
有没有人找到解决这个问题的方法?
scala - 如何在编译时进行类型检查?
在TraversableOnce
中,有一个sum
方法只有在包含的类型是时才可用Numeric
(否则它不会编译)。我想知道这是否可用于其他情况(以避免运行时检查)。
特别是我们有两个特征 A 和 B 的情况。我们希望有一个方法f
,只有当对象继承 A 和 B 时才能使用。但如果它只扩展其中一个,则不能。我不想再做一个trait AB extends A with B
。f
如果不是两个特征都被继承,我只想无法使用。
编辑:解决方案,感谢@Aaron Novstrup
现在在main
,b.f
不编译。好的
编辑 2:将第 [1] 行更改为 [2] 反映了@Aaron Novstrup 回答的变化
编辑 3:不使用self
@Aaron Novstrup 在答案中的反映变化
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?
c++ - 实现具有自定义行为的字符串类
在我们的一个班级中,先生说模板允许自定义类的行为,然后他给出了字符串类的示例,只需几行代码,我们就可以从 STL 自定义字符串类,例如,我们可以让它处理 ' a'和'z'一样,'b'和'y'一样,'c'和'x'一样等等。相似的'A'和'Z'相同等。
“abc” == “zyx” 为真;
“Abc” == “zyx” 为假;
"Abc == "Zyx" 为真;
ETC
我正在考虑实现这样的字符串类,但我不能这样做。我们如何使用模板实现这样的字符串类?
c++ - 纯粹作为库实现的 C++ is_lambda 特征是不可能的吗?
我有一个关于 C++0x lambdas 的问题。在我的代码中,了解给定类型是否是 C++0x lambda 表达式的类型会很有帮助。举个例子:
将 lambda 表达式与函数和成员函数类型区分开来相当容易。函子是另一回事。
我在这里看到的问题是根据即将到来的 C++0x 标准定义 lambda 表达式;唯一必须定义的是公共呼叫操作员。然而,对于函子也是如此;测试调用运算符的存在不足以区分 lambda 表达式和仿函数。此外,如果函子的运算符不存在,则会发生编译器错误,因为 SFINAE 不适用。这什么时候发生?函子的调用操作符可以被模板化。所以,这样的代码:
将适用于具有非模板化调用运算符的 lambda 表达式和仿函数,并为模板化调用运算符生成编译器错误。
我相信is_lambda < >
只能使用内在编译器功能创建特征。您是否看到了如何实现此特征的方法?
c++ - 检测嵌套类型的 const-ness
通常,如果我需要检测一个类型是否是const
我只需使用boost::is_const
. 但是,在尝试检测嵌套类型的 const 时遇到了麻烦。考虑以下特征模板,它专门用于 const 类型:
问题是boost::is_const
似乎没有检测到这traits<const T>::reference
是一种const
类型。
例如:
这输出:false false
为什么不输出false true
?
c++ - 有没有办法使用特征使 pos_type 和 off_type 成为 int64_t ?
我试图了解特征是什么,例如typedef typename traits_type::off_type off_type
GNU 实现中的表达式fstream
。
当我处理大于 2/4 GB 的文件时出现了这个问题。我发现使用适当的标志重新编译 STL 库通常可以解决大文件问题。
scala - 命名为 Scala 的自类型仍然会影响“this”?
所以我创建了一个按预期失败的示例:
自我类型的“this”遮蔽了 B 的“this”——看起来很奇怪,但很有意义。
那么,给自我类型起一个不同的名字似乎是明智的。我这样做了,很惊讶:
还是有阴影???
更改“本地”变量的名称可以编译,这是有道理的:
(并且可以选择使用 self 类型名称来明确使用哪个“v”。)
好的。这意味着以下应该失败?
嗯?这是哪个?:-(
那么......命名自我类型有什么意义吗?无论如何,“这个”似乎最终都被遮蔽了。
或者这是范围规则的边缘情况,其中自我类型的“this”优先于特征的“this”——并且应该避免对相关特征中的事物使用相同的名称?
c++ - 此类的 C++ 特征示例
我已经有一段时间没有使用 C++ 的高级特性了,并且正在刷新我的 C++ 知识。话虽如此,特征和基于策略的编程的概念是我从未真正设法理解的东西。
我想改变它。我正在编写一个通用容器。我想强制执行一个策略,即容器将只存储从特定基类派生的类。这是因为当尝试访问向量边界之外的项目时,容器会返回一个无效对象(而不是抛出)。
我将如何使用特征来限制这个通用容器只包含类“ContainerItem”的子类?
scala - 实现支持方法链的 Scala trait 的最佳实践
我想制作一个特征,为类添加一些属性并使链接方法成为可能。在 Scala 2.8.1 中测试。
在这种情况下,最常见的做法是什么?(首选类型安全的方式)