---
name: "Class::Virtually::Abstract"
section: "3pm"
platform: "linux"
package: "libclass-virtual-perl"
version: "0.08-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Class::Virtually::Abstract"
---

# Class::Virtually::Abstract(3pm)

Compile-time enforcement of Class::Virtual

## NAME

Class::Virtually::Abstract - Compile-time enforcement of Class::Virtual

## SYNOPSIS

```
  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't
  # fully implement My::Virtual::Idaho.
  use My::Private::Idaho;
```

## DESCRIPTION

This subclass of Class::Virtual provides **compile-time** enforcement. That means subclasses of your virtual class are **required** to implement all virtual methods or else it will not compile.

## BUGS and CAVEATS

Because this relies on **import()** it is important that your classes are **use**d instead of **require**d.  This is a problem, and I'm trying to figure a way around it.

Also, if a subclass defines its own **import()** routine (I've done it) Class::Virtually::Abstract's compile-time checking is defeated.

Got to think of a better way to do this besides **import()**.

## AUTHOR

Original idea and code from Ben Tilly's AbstractClass http://www.perlmonks.org/index.pl?node\_id=44300&lastnode\_id=45341

Embraced and Extended by Michael G Schwern \<schwern@pobox.com\>

## SEE ALSO

Class::Virtual
