问题标签 [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 投票
2 回答
347 浏览

c++ - 声明用于记录的类的模块名称

我目前正在向我们的日志库添加一些功能。其中之一是可以为一个类声明一个模块名,该类会自动预先添加到从该类中写入的任何日志消息中。但是,如果没有提供模块名称,则不会添加任何内容。目前我正在使用一个具有返回名称的静态函数的特征类。

可以使用辅助宏定义此类。缺点是模块名称必须在类之外声明。我希望这在课堂上是可能的。此外,我希望能够使用预处理器指令删除所有日志记录代码。我知道使用 SFINAE 可以检查模板参数是否具有某个成员,但由于其他人对模板不像我那么友好,因此必须维护代码,我正在寻找一种更简单的解决方案。如果没有,我将坚持使用特征方法。

提前致谢!

0 投票
3 回答
2145 浏览

actionscript-3 - AS3 中的 Mixin 或 Trait 实现?

我正在寻找有关如何在 AS3 中实现Mixin/Trait样式系统的想法。

我希望能够将多个类组合成一个对象。当然,这不是 AS3 的语言级功能,但我希望可能有某种方法可以使用基于原型的技术或我相信 AsMock 用来实现其功能的一些字节码黑客技术来做到这一点。

现有的 Java 示例是Qi4J,其中用户定义 Qi4j 框架根据元数据标签和约定编码实现的接口。

有人对如何在 AS3 中使用 Mixin/Trait 概念有任何想法吗?

0 投票
2 回答
957 浏览

c++ - 使用已弃用的绑定器和 C++0x lambda

C++0x 已弃用旧的绑定器,例如bind1stbind2nd支持通用std::bind. C++0x lambda 可以很好地绑定,std::bind但它们不能与经典的 bind1st 和 bind2nd 绑定,因为默认情况下 lambda 没有嵌套的 typedef,例如argument_typefirst_argument_typesecond_argument_typeresult_type. 所以我认为std::function可以作为将 lambdas 绑定到旧绑定器的标准方法,因为它公开了必要的 typedef。

但是,std::function在这种情况下很难使用 using,因为它会强制您在实例化函数类型时拼写出函数类型。

我找不到方便的对象生成器std::function。像这样的东西std::make_fuction会很高兴。这样的事情存在吗?如果没有,还有其他更好的方法将 lamdas 绑定到经典活页夹吗?

0 投票
3 回答
1670 浏览

c++ - 跨 C++0x 编译器的 lambda 特征不一致

我观察到两个编译器(g++ 4.5,VS2010 RC)在将 lambdas 与类模板的部分特化匹配的方式上存在一些不一致。我试图为 lambdas 实现类似 boost::function_types 的东西来提取类型特征。检查以获取更多详细信息。

在 g++ 4.5 中,operator()lambda 的类型似乎类似于独立函数 (R (*)(...)) 的类型,而在 VS2010 RC 中,它似乎类似于成员函数 (R ( C::*)(...))。所以问题是编译器编写者可以自由地解释他们想要的任何方式吗?如果不是,哪个编译器是正确的?请参阅下面的详细信息。

该程序可在 g++ 4.5 和 VS2010 上编译,但实例化的 function_traits 与代码中所述不同。

0 投票
4 回答
2319 浏览

c++ - 从 trait 获取 const 或非 const 引用类型

我正在编写一个仿函数 F,它采用 void (*func)(T) 类型的函数和 func 的参数 arg。

然后仿函数 F 用 arg 调用 func。我希望 F 不要复制 arg,只是将其作为参考传递。但是我不能简单地写“void F(void (*func)(T), T&)”,因为 T 可能是一个引用。所以我正在尝试编写一个特征,它允许获得正确的 T 引用类型:

我想出了这样的事情:

例如,这不适用于

给出错误:在传递 'void F(void (*)(T), typename type_op::valid_ref_type) [with T =整数]'</p>

如何让这个特性发挥作用?

0 投票
1 回答
1035 浏览

c++ - 在 C++ 中实现 is_same_type 类型特征的程序

嗨,任何人都可以提供一个示例程序来在 C++ 中实现 is_same_type 类型特征吗?

0 投票
5 回答
1261 浏览

c++ - 由特征实例化的类成员函数 [实际上是策略]

我不愿意说我想不通,但我想不通。我用谷歌搜索并搜索了 Stack Overflow,但结果是空的。

问题的抽象且可能过于模糊的形式是,如何使用特征模式来实例化成员函数? [更新:我在这里使用了错误的术语。它应该是“政策”而不是“特征”。特征描述现有的类。策略规定了合成类。]这个问题是在对我 10 多年前编写的一组多元函数优化器进行现代化改造时提出的。

优化器都通过选择一条远离当前最佳点的直线路径通过参数空间(“更新”),然后在该线上找到更好的点(“线搜索”),然后测试“完成” " 条件,如果没有完成,则迭代。

有不同的方法来进行更新、行搜索,以及可以想象的完成测试和其他事情。连连看。不同的更新公式需要不同的状态变量数据。例如,LMQN 更新需要一个向量,而 BFGS 更新需要一个矩阵。如果评估梯度很便宜,那么线搜索应该这样做。如果没有,它应该只使用函数评估。有些方法比其他方法需要更准确的线搜索。这些只是一些例子。

原始版本通过虚函数实例化了几种组合。通过设置在运行时测试的模式位来选择一些特征。呸。用#define 定义特征并用#ifdef 和宏定义成员函数将是微不足道的。但那是二十年前的事了。让我感到困扰的是,我无法找到一种非常棒的现代方式。

如果只有一个不同的特征,我可以使用奇怪的重复模板模式。但我认为没有办法将其扩展到任意特征组合。

我尝试使用boost::enable_if等。专业的状态信息很容易。我设法完成了这些功能,但只能求助于将this-pointer 作为参数的非友元外部函数。我什至从未想过如何让函数成为朋友,更不用说成员函数了。编译器(VC++ 2008)总是抱怨事情不匹配。我会大喊:“SFINAE,你这个白痴!” 但这个白痴可能是我。

也许标签调度是关键。我还没有深入了解。

当然有可能,对吧?如果是这样,最佳做法是什么?

更新:这是另一个解释它的尝试。我希望用户能够为自定义优化器填写订单(清单),例如从中文菜单中订购 - 一个来自 A 列,一个来自 B 列,等等。服务员,来自 A 列(更新程序) ,我将使用 Cholesky 分解酱更新 BFGS。请从 B 列(线搜索器)开始,我将进行三次插值线搜索,其 eta 为 0.4,rho 为 1e-4。ETC...

更新:好的,好的。这是我做过的游戏。我不情愿地提供它,因为我怀疑这是一种完全错误的方法。它在 vc++ 2008 下运行良好。

0 投票
1 回答
3713 浏览

scala - Scala 特征和隐式转换混淆

当我在 Scala REPL (2.7.7) 上手动输入以下行时,它们会起作用:

但是,如果我尝试用它编译文件,我会收到以下错误:

为什么?

谢谢!

0 投票
1 回答
821 浏览

perl - 当 Moose 中的基础属性发生变化时重建延迟构建的属性

我有一个带有lazy_build属性的 Moose 类。该属性的值是另一个(非惰性)属性的函数。

假设有人用所需属性的值为 42 来实例化类。然后他们请求lazy属性,这个属性是42的函数。然后,他们还好意思改第一个属性!

懒惰的已经被构建了,所以构建器不会被再次调用,并且懒惰的属性现在已经过时了。

我现在有一个解决方案,我在所需属性上维护一个“脏”标志,而惰性属性上的访问器检查脏标志并在需要时重建它。

但是,这似乎需要做很多工作。有没有办法在 Moose 中处理这个问题,例如使用特征?

0 投票
1 回答
457 浏览

scala - 特征实现

如果我有一些特征,例如:

我可以用两种方式编写类(C1 和 C2 添加相同的功能)

什么变体更好(有效)?