标签: traits

scala中trait中使用的抽象值是否有问题?

我有

trait Invoker {
  val method: Method
}
Run Code Online (Sandbox Code Playgroud)

Intellij IDEA代码检查警告我"特征中使用的抽象值".一切都很好.在特质中使用抽象值有什么问题吗?如果是这样,我应该如何指定特征的所有扩展器必须定义方法属性?

scala traits

26
推荐指数
2
解决办法
4460
查看次数

(重新)命名为std :: pair成员

而不是写town->first我想写town->name.内联命名访问器(重命名地图迭代器命名std :: pair成员的第一个和第二个)是我到目前为止找到的最佳解决方案.我对命名访问器的问题是类型安全性的丢失: pair<int,double>可能是指struct { int index; double value; }或者struct { int population; double avg_temp; }.任何人都可以提出一个简单的方法,也许类似于特征?

我经常想从一个函数返回一对或一个元组,struct city { string name; int zipcode; }每次引入一个类似的新类型和它的ctor 是非常累人的.我很高兴了解boost和C++ 0x但我需要一个没有提升的纯C++ 03解决方案.

更新

Re andrewdski的问题:是的,一个(假设的)语法就像pair<int=index, double=value>创建一个不同的类型来pair<int=population, double=avg_temp>满足你的要求.我甚至不介意实现一个自定义的对/元组模板类ONCE,只是当我需要一个新类型时,只是将'name traits'模板参数传递给它.我不知道'名称特征'会是什么样子.也许这是不可能的.

c++ templates stl typedef traits

25
推荐指数
3
解决办法
1万
查看次数

PHP类型提示特征

我有一个特点.为了创造力,让我们称之为特质Trait:

trait Trait{    
    static function treat($instance){    
        // treat that trait instance with care
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我还有一个使用这个特性的类,User.当尝试使用User实例调用treat时,一切正常.但我想输入提示,只有使用Trait的类的实例应该作为参数给出,如下所示:

static function treat(Trait $instance){...}
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,这会导致致命的错误,该错误表明该函数期待Trait的一个实例,但是给出了一个User实例.这种类型的提示适用于继承和实现,但我如何键入提示特征?

php traits type-hinting

25
推荐指数
2
解决办法
8321
查看次数

我如何实现一个我不拥有的特性我没有的类型?

我想实现这个Shl特性Vec,代码如下.这会使事情变得vec << 4可能,这对于它来说是个不错的选择vec.push(4).

use std::ops::Shl;

impl<T> Shl<T> for Vec<T> {
    type Output = Vec<T>;

    fn shl(&self, elem: &T) -> Vec<T> {
        self.push(*elem);
        *self
    }
}

fn main() {
    let v = vec![1, 2, 3];
    v << 4;
}
Run Code Online (Sandbox Code Playgroud)

编译失败,出现以下错误:

无法提供扩展实现,其中特征和类型都未在此包中定义[E0117]

要么

type参数T必须用作某些本地类型的类型参数(例如MyStruct<T>); 只有当前包中定义的特征才能为类型参数实现[E0210]

据我了解,我必须修补stdlib,更具体地来说是collections::vec板条箱.有没有其他方法可以更改此代码以成功编译?

traits rust

25
推荐指数
3
解决办法
3230
查看次数

如何从方法返回特征实例?

我正在尝试创建一个返回Shader特征实例的函数.这是我极为简化的代码:

trait Shader {}

struct MyShader;
impl Shader for MyShader {}

struct GraphicsContext;

impl GraphicsContext {
    fn create_shader(&self) -> Shader {
        let shader = MyShader;
        shader
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error[E0277]: the trait bound `Shader + 'static: std::marker::Sized` is not satisfied
  --> src/main.rs:10:32
   |
10 |     fn create_shader(&self) -> Shader {
   |                                ^^^^^^ `Shader + 'static` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `Shader …
Run Code Online (Sandbox Code Playgroud)

traits rust

25
推荐指数
2
解决办法
1万
查看次数

在C++ 0x标准中使用/定义了什么样的"特征"

C++中的特征封装了一系列操作,这些操作允许算法或数据结构使用与其实例化的类型的操作符.char_traits是分组string和文件所需功能的示例.

但并非所有特质都在他们的名字中有"特质",对吧?numeric_limits浮现在脑海中.这也是"特质"吗?即使没有名称"特质"吗?

那么,是否有其他模板可以/应该被视为"特征"?除了我发现的例子:

  • allocator_traits 如何获得记忆
  • pointer_traits 如何间接访问对象
  • type_traits 元编程
  • char_taits 符号序列
  • iterator_traits 如何前进,后退和元素
  • regex_traits 为...正则表达式.

我想,我要问的是,是否有一个纯粹的特征定义

我特别不确定的一些事情是:

  • numeric_limits 上文提到的
  • <chrono>定制"特征",[20.11.4],即 duration_values
  • Hashing怎么样?hash<>算子可以被认为是一种特质吗?
  • 如果是这样的话,并不是所有的要求都是"特征",比如"CopyAssignable"等等?
  • 然后,废弃的"概念"是最终的"特质" - 定义吗?

更新:究竟是什么让特质成为特质似乎在细节上有点争议.也许可以回答另一个问题:是否有一个全面的列表,哪些类似特征的类对C++ 0x来说是新的,哪些已经在C++ 03中?也许有人知道某个地方的链接?

c++ traits type-traits c++11

24
推荐指数
2
解决办法
944
查看次数

PHP特征方法冲突:特质"继承"和特征层次结构

更新:在我对这个问题的思考中并不孤单,这似乎确实是一个错误.看到这里.它修复的那一天将是一个美好的一天!:)


这开始了I love PHP traits! I'm going to use them everywhere! ^_^,现在它变成了一个Thought Exercise / Learning Experience >_<.

请考虑以下示例:

trait TheErrorOfYourWays{

   public function booboo(){
       echo 'You had a booboo :(';
   }
}

trait SpectacularStuff1 {
    use TheErrorOfYourWays; 
}

trait SpectacularStuff2 {
    use TheErrorOfYourWays;
}

class DoSomethingSpectacular {
    use SpectacularStuff1, SpectacularStuff2;
}
Run Code Online (Sandbox Code Playgroud)

这导致(显然不那么明显):

致命错误:Trait方法booboo尚未应用,因为在DoSomethingSpectacular上存在与其他特征方法的碰撞.

所以我的问题是:如何解决特征中的方法冲突?是否有可能实现重叠特质"继承"?如果是这样,那么"正确"的方法是什么?

为什么我要这样做:

  1. 我想创建自包含的特征和类(混合和匹配样式).如果可能的话,我想说"使用"然后必须发生神奇的东西.没有必要抓住我的想法,"现在又有什么命名空间?"等等等等.
  2. 当我做一些"冒险"的事情并发现我无意中造成了冲突时,不必动态编辑类和特征.
  3. 当时看起来像个好主意.

我尝试过的:

  1. PHP手册.
  2. 谷歌.
  3. 所以包括这个问题 - >这个场景的答案不正确.
  4. 发现这个,但我使用的是PHP 5.5.1版.这是固定的,对吗?对? …

php class multiple-inheritance traits

24
推荐指数
2
解决办法
9971
查看次数

用于特征的PHP instanceof

检查某个班级是否使用某种特质的正确方法是什么?

php class instanceof traits

24
推荐指数
4
解决办法
2万
查看次数

定义与变量a相同类型的变量b

是否可以声明var_b与另一个变量相同类型的变量var_a

例如:

template <class T>
void foo(T t) {

   auto var_a = bar(t);
   //make var_b of the same type as var_a

}


F_1 bar(T_1 t) {

}

F_2 bar(T_2 t) {

}
Run Code Online (Sandbox Code Playgroud)

c++ templates traits c++11

24
推荐指数
4
解决办法
2939
查看次数

在Trait定义中使用impl Trait

是否可以将traits中的函数定义为具有impl Trait返回类型?我想创建一个可以由多个结构实现的特征,以便new()所有这些特征的函数返回一个对象,它们都可以以相同的方式使用,而无需编写特定于每个结构的代码.

trait A {
    fn new() -> impl A;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

impl Trait 不允许在函数和固有方法返回类型之外

这只是impl TraitRust 当前实现的限制还是我使用它错了?

traits rust

23
推荐指数
3
解决办法
5393
查看次数