我一直在玩弄驼鹿,得到的感觉吧。 我想的像在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