.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Class::Virtually::Abstract 3pm" .TH Class::Virtually::Abstract 3pm "2022-06-12" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Class::Virtually::Abstract \- Compile\-time enforcement of Class::Virtual .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& package My::Virtual::Idaho; \& use base qw(Class::Virtually::Abstract); \& \& _\|_PACKAGE_\|_\->virtual_methods(qw(new foo bar this that)); \& \& \& package My::Private::Idaho; \& use base qw(My::Virtual::Idaho); \& \& sub new { ... } \& sub foo { ... } \& sub bar { ... } \& sub this { ... } \& # oops, forgot to implement that()!! Whatever will happen?! \& \& \& # Meanwhile, in another piece of code! \& # KA\-BLAM! My::Private::Idaho fails to compile because it didn\*(Aqt \& # fully implement My::Virtual::Idaho. \& use My::Private::Idaho; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This subclass of Class::Virtual provides \fBcompile-time\fR enforcement. That means subclasses of your virtual class are \fBrequired\fR to implement all virtual methods or else it will not compile. .SH "BUGS and CAVEATS" .IX Header "BUGS and CAVEATS" Because this relies on \fBimport()\fR it is important that your classes are \&\fBuse\fRd instead of \fBrequire\fRd. This is a problem, and I'm trying to figure a way around it. .PP Also, if a subclass defines its own \fBimport()\fR routine (I've done it) Class::Virtually::Abstract's compile-time checking is defeated. .PP Got to think of a better way to do this besides \fBimport()\fR. .SH "AUTHOR" .IX Header "AUTHOR" Original idea and code from Ben Tilly's AbstractClass http://www.perlmonks.org/index.pl?node_id=44300&lastnode_id=45341 .PP Embraced and Extended by Michael G Schwern .SH "SEE ALSO" .IX Header "SEE ALSO" Class::Virtual