C ++ - 穆斯的用法一样用Perl对OOP(C++-like usage of Moose w

2019-08-02 19:47发布

我一直在玩弄驼鹿,得到的感觉吧。 我想的像在C纯虚函数的示例++但在驼鹿用语(特别是在一个C ++ - 寻找方式)。 我知道,即使驼鹿气势比正常的Perl更严格的模型,还是有做我问什么(通过方法改性剂或一种以上的方法SUPER::调用)。 这就是为什么我专门要求的实现类似于C ++尽可能地。 至于“为什么呢?” 这一限制? 晴好奇,同时也计划到港的一些C ++代码的方式,C ++与驼鹿perl的-为中心的人可能大多认同。

Answer 1:

我能想到的使用角色,而不是子类是这样的:

{
    package AbstractRole;
    use Moose::Role;
    requires 'stuff';  
}

{
    package Real;
    use Moose;
    with 'AbstractRole';
}

因为真正不具备的东西确定这会给出一个编译错误。

添加的东西的方法来实现将使其工作:

{
    package Real;
    use Moose;
    with 'AbstractRole';

    sub stuff { print "Using child function!\n" }
}


Answer 2:

你可能也想看看杰西Luehrs' MooseX :: ABC 。 这似乎非常相似,这里的一些实现的。 从简介:

package Shape;
use Moose;
use MooseX::ABC;

requires 'draw';

package Circle;
use Moose;
extends 'Shape';

sub draw {
    # stuff
}

my $shape = Shape->new; # dies
my $circle = Circle->new; # succeeds

package Square;
use Moose;
extends 'Shape'; # dies, since draw is unimplemented

我知道,杰西是白天一个C ++程序员。



Answer 3:

看来我不能做什么我想和驼鹿,但是我可以非常接近与角色。 下面是从麋手册中的信息录入的角色:

角色对战抽象基类

如果您熟悉其他语言的抽象基类的概念,你可能会以同样的方式使用角色。

您可以定义一个“界面,只是”角色,一个只包含一个必要方法清单。

但是,这会消耗这个角色的所有类必须实现所有必需的方法,直接或通过从父继承。 你不能耽误方法条件检查,使他们能够通过未来的子类实现。

因为角色直接定义所需的方法,加入了基类的混合起不到什么。 我们建议您简单地消耗在每一个实现该接口的类接口的作用。



Answer 4:

这里是我的尝试(不角色,对角色的信息,请参阅其他的答案):

package Abstract;
use Moose;

sub stuff;

package Real;
use Moose;
extends 'Abstract';

override 'stuff' => sub { print "Using child function!\n"; }


文章来源: C++-like usage of Moose with Perl for OOP
标签: c++ perl oop moose