Search code examples
c++perloopmoose

C++-like usage of Moose with Perl for OOP


I've been playing around with Moose, getting a feel for it. I'd like an example of pure virtual functions like in C++ but in Moose parlance (specifically in a C++-looking way). I know that even with Moose imposing a stricter model than normal Perl, there's still more than one way to do what I'm asking (via method modifiers or SUPER:: calls). That is why I'm asking specifically for an implementation resembling C++ as much as possible. As for the "why?" of this restriction? Mostly curiosity, but also planning to port some C++ code to Perl with Moose in a way that C++-centric people could mostly identify with.


Solution

  • I can think of this way using roles instead of subclassing:

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

    This will give a compilation error because Real doesn't have stuff defined.

    Adding stuff method to Real will now make it work:

    {
        package Real;
        use Moose;
        with 'AbstractRole';
    
        sub stuff { print "Using child function!\n" }
    }