C++ - 就像使用Mol和Perl一样用于OOP

Kyl*_*lsh 6 c++ oop perl moose

我一直在玩Moose,感受它.我想要一个像C++一样的纯虚函数的例子,但是用Moose的说法(特别是用C++看).我知道即使Moose强加了比普通Perl更严格的模型,仍然有不止一种方法可以做我想问的方法(通过方法修饰符或SUPER::调用).这就是为什么我要尽可能专门针对类似C++的实现.至于"为什么?" 这个限制?晴好奇,同时也计划到港的一些C++代码的方式,C++与驼鹿perl的-为中心的人可能大多认同.

dra*_*tun 5

我可以想到这种方式使用角色而不是子类化:

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

{
    package Real;
    use Moose;
    with 'AbstractRole';
}
Run Code Online (Sandbox Code Playgroud)

这将产生编译错误,因为Real没有定义任何东西.

向Real 添加stuff方法现在可以使它工作:

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

    sub stuff { print "Using child function!\n" }
}
Run Code Online (Sandbox Code Playgroud)


per*_*rin 5

您可能还想看看Jesse 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
Run Code Online (Sandbox Code Playgroud)

我知道Jesse在白天是一名C++程序员.