Please check out the library's documentation to learn more.
This page gives a 10,000-foot view of the library. For the motivation, tutorials and reference, please follow the documentation link.
Free-standing virtual functions, similar to CLOS, Clojure, Julia, Dylan, etc.
Single dispatch can be as fast as equivalent virtual function calls.
Multiple dispatch in constant time (for a given number of virtual parameters).
Redundancy-free multiple dispatch tables.
Inter-operation with standard smart pointers, extensible to other pointer-like types.
Exception agnostic by default.
Macro-based interface for convenience.
Macro-free interface for inter-operation with templates.
Customization points for alternative RTTI systems, error handling, vptr placement, etc.
Header-only.
The library requires an optimizing compiler supporting C++17 or above.
Boost.OpenMethod is tested with the following compilers:
clang: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
gcc: 8, 9, 10, 11, 12, 13, 14, 15
msvc: 14.3
icpx
…on the following platforms:
Linux
macOS
Windows
s390x
The development infrastructure for the library includes these per-commit analyses:
Coverage reports
Clang sanitizers
Compilation and tests on Drone.io and GitHub Actions
Questions, suggestions, defect reports, etc can be submitted via the following channels:
Slack. Best for quick questions, especially for those getting started with the library.
The Boost developers mailing
list. Best for in-depth discussion of the features, future, and implementation
of the library. Be sure to read the
discussion policy before posting.
Please add the [openmethod] tag at the beginning of the subject line.
Issues page on GitHub. Best for bug reports. Please mention the Boost version, platform and compiler you are using, and provide a small compilable code sample to reproduce the problem. Also a good place for feature requests and suggestions.
Distributed under the Boost Software License, Version 1.0.
<div class="sect1"> <h2 id="_boost_openmethod">Boost.OpenMethod</h2> <div class="sectionbody"> <div class="paragraph"> <p>This page gives a 10,000-foot view of the library. For the motivation, tutorials and reference, please follow the documentation link.</p> </div> <div class="sect2"> <h3 id="_features">Features</h3> <div class="ulist"> <ul> <li> <p>Free-standing virtual functions, similar to CLOS, Clojure, Julia, Dylan, etc.</p> </li> <li> <p>Single dispatch can be as fast as equivalent virtual function calls.</p> </li> <li> <p>Multiple dispatch in constant time (for a given number of virtual parameters).</p> </li> <li> <p>Redundancy-free multiple dispatch tables.</p> </li> <li> <p>Inter-operation with standard smart pointers, extensible to other pointer-like types.</p> </li> <li> <p>Exception agnostic by default.</p> </li> <li> <p>Macro-based interface for convenience.</p> </li> <li> <p>Macro-free interface for inter-operation with templates.</p> </li> <li> <p>Customization points for alternative RTTI systems, error handling, vptr placement, etc.</p> </li> <li> <p>Header-only.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_requirements">Requirements</h3> <div class="paragraph"> <p>The library requires an optimizing compiler supporting C++17 or above.</p> </div> </div> <div class="sect2"> <h3 id="_tested_compilers">Tested Compilers</h3> <div class="paragraph"> <p>Boost.OpenMethod is tested with the following compilers:</p> </div> <div class="ulist"> <ul> <li> <p>clang: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20</p> </li> <li> <p>gcc: 8, 9, 10, 11, 12, 13, 14, 15</p> </li> <li> <p>msvc: 14.3</p> </li> <li> <p>icpx</p> </li> </ul> </div> <div class="paragraph"> <p>…​on the following platforms:</p> </div> <div class="ulist"> <ul> <li> <p>Linux</p> </li> <li> <p>macOS</p> </li> <li> <p>Windows</p> </li> <li> <p>s390x</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_quality_assurance">Quality Assurance</h3> <div class="paragraph"> <p>The development infrastructure for the library includes these per-commit analyses:</p> </div> <div class="ulist"> <ul> <li> <p>Coverage reports</p> </li> <li> <p>Clang sanitizers</p> </li> <li> <p>Compilation and tests on Drone.io and GitHub Actions</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_build_status">Build Status</h3> <table class="tableblock frame-all grid-all stretch"> <colgroup> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.667%;"> </colgroup> <thead> <tr> <th class="tableblock halign-center valign-top">Branch</th> <th class="tableblock halign-left valign-top">GH Actions</th> <th class="tableblock halign-left valign-top">Coverity Scan</th> <th class="tableblock halign-left valign-top">codecov.io</th> <th class="tableblock halign-left valign-top">Deps</th> <th class="tableblock halign-left valign-top">Docs</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-center valign-top"><p class="tableblock"><a href="https://github.com/boostorg/openmethod/tree/master"><code>master</code></a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://github.com/boostorg/openmethod/actions/workflows/ci.yml"><img src="https://github.com/boostorg/openmethod/actions/workflows/ci.yml/badge.svg?branch=master" alt="CI"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://scan.coverity.com/projects/boostorg-openmethod"><img src="https://scan.coverity.com/projects/32486/badge.svg" alt="Coverity Scan Build Status"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://codecov.io/gh/boostorg/openmethod/branch/master"><img src="https://codecov.io/gh/boostorg/openmethod/branch/master/graph/badge.svg" alt="codecov"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://pdimov.github.io/boostdep-report/master/openmethod.html"><img src="https://img.shields.io/badge/deps-master-brightgreen.svg" alt="Deps"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://www.boost.org/library/latest/openmethod/"><img src="https://img.shields.io/badge/docs-master-brightgreen.svg" alt="Documentation"></a></span></p></td> </tr> <tr> <td class="tableblock halign-center valign-top"><p class="tableblock"><a href="https://github.com/boostorg/openmethod/tree/develop"><code>develop</code></a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://github.com/boostorg/openmethod/actions/workflows/ci.yml"><img src="https://github.com/boostorg/openmethod/actions/workflows/ci.yml/badge.svg?branch=develop" alt="CI"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://scan.coverity.com/projects/boostorg-openmethod"><img src="https://scan.coverity.com/projects/32486/badge.svg" alt="Coverity Scan Build Status"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://codecov.io/gh/boostorg/openmethod/branch/develop"><img src="https://codecov.io/gh/boostorg/openmethod/branch/develop/graph/badge.svg" alt="codecov"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://pdimov.github.io/boostdep-report/develop/openmethod.html"><img src="https://img.shields.io/badge/deps-develop-brightgreen.svg" alt="Deps"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://www.boost.org/doc/libs/develop/libs/openmethod/doc/html/openmethod"><img src="https://img.shields.io/badge/docs-develop-brightgreen.svg" alt="Documentation"></a></span></p></td> </tr> </tbody> </table> </div> <div class="sect2"> <h3 id="_community">Community</h3> <div class="paragraph"> <p>Questions, suggestions, defect reports, etc can be submitted via the following channels:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://cpplang.slack.com/archives/C0A16HR702G">Slack</a>. Best for quick questions, especially for those getting started with the library.</p> </li> <li> <p><a href="http://www.boost.org/community/groups.html#main">The Boost developers mailing list</a>. Best for in-depth discussion of the features, future, and implementation of the library. Be sure to read the <a href="http://www.boost.org/community/policy.html">discussion policy</a> before posting. Please add the <code>[openmethod]</code> tag at the beginning of the subject line.</p> </li> <li> <p><a href="https://github.com/boostorg/openmethod/issues">Issues page on GitHub</a>. Best for bug reports. Please mention the Boost version, platform and compiler you are using, and provide a small compilable code sample to reproduce the problem. Also a good place for feature requests and suggestions.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_license">License</h3> <div class="paragraph"> <p>Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</p> </div> </div> </div> </div>
<div class="sect1"> <h2 id="_boost_openmethod">Boost.OpenMethod</h2> <div class="sectionbody"> <div class="paragraph"> <p>This page gives a 10,000-foot view of the library. For the motivation, tutorials and reference, please follow the documentation link.</p> </div> <div class="sect2"> <h3 id="_features">Features</h3> <div class="ulist"> <ul> <li> <p>Free-standing virtual functions, similar to CLOS, Clojure, Julia, Dylan, etc.</p> </li> <li> <p>Single dispatch can be as fast as equivalent virtual function calls.</p> </li> <li> <p>Multiple dispatch in constant time (for a given number of virtual parameters).</p> </li> <li> <p>Redundancy-free multiple dispatch tables.</p> </li> <li> <p>Inter-operation with standard smart pointers, extensible to other pointer-like types.</p> </li> <li> <p>Exception agnostic by default.</p> </li> <li> <p>Macro-based interface for convenience.</p> </li> <li> <p>Macro-free interface for inter-operation with templates.</p> </li> <li> <p>Customization points for alternative RTTI systems, error handling, vptr placement, etc.</p> </li> <li> <p>Header-only.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_requirements">Requirements</h3> <div class="paragraph"> <p>The library requires an optimizing compiler supporting C++17 or above.</p> </div> </div> <div class="sect2"> <h3 id="_tested_compilers">Tested Compilers</h3> <div class="paragraph"> <p>Boost.OpenMethod is tested with the following compilers:</p> </div> <div class="ulist"> <ul> <li> <p>clang: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20</p> </li> <li> <p>gcc: 8, 9, 10, 11, 12, 13, 14, 15</p> </li> <li> <p>msvc: 14.3</p> </li> <li> <p>icpx</p> </li> </ul> </div> <div class="paragraph"> <p>…​on the following platforms:</p> </div> <div class="ulist"> <ul> <li> <p>Linux</p> </li> <li> <p>macOS</p> </li> <li> <p>Windows</p> </li> <li> <p>s390x</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_quality_assurance">Quality Assurance</h3> <div class="paragraph"> <p>The development infrastructure for the library includes these per-commit analyses:</p> </div> <div class="ulist"> <ul> <li> <p>Coverage reports</p> </li> <li> <p>Clang sanitizers</p> </li> <li> <p>Compilation and tests on Drone.io and GitHub Actions</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_build_status">Build Status</h3> <table class="tableblock frame-all grid-all stretch"> <colgroup> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.6666%;"> <col style="width: 16.667%;"> </colgroup> <thead> <tr> <th class="tableblock halign-center valign-top">Branch</th> <th class="tableblock halign-left valign-top">GH Actions</th> <th class="tableblock halign-left valign-top">Coverity Scan</th> <th class="tableblock halign-left valign-top">codecov.io</th> <th class="tableblock halign-left valign-top">Deps</th> <th class="tableblock halign-left valign-top">Docs</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-center valign-top"><p class="tableblock"><a href="https://github.com/boostorg/openmethod/tree/master"><code>master</code></a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://github.com/boostorg/openmethod/actions/workflows/ci.yml"><img src="https://github.com/boostorg/openmethod/actions/workflows/ci.yml/badge.svg?branch=master" alt="CI"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://scan.coverity.com/projects/boostorg-openmethod"><img src="https://scan.coverity.com/projects/32486/badge.svg" alt="Coverity Scan Build Status"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://codecov.io/gh/boostorg/openmethod/branch/master"><img src="https://codecov.io/gh/boostorg/openmethod/branch/master/graph/badge.svg" alt="codecov"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://pdimov.github.io/boostdep-report/master/openmethod.html"><img src="https://img.shields.io/badge/deps-master-brightgreen.svg" alt="Deps"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://www.boost.org/library/latest/openmethod/"><img src="https://img.shields.io/badge/docs-master-brightgreen.svg" alt="Documentation"></a></span></p></td> </tr> <tr> <td class="tableblock halign-center valign-top"><p class="tableblock"><a href="https://github.com/boostorg/openmethod/tree/develop"><code>develop</code></a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://github.com/boostorg/openmethod/actions/workflows/ci.yml"><img src="https://github.com/boostorg/openmethod/actions/workflows/ci.yml/badge.svg?branch=develop" alt="CI"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://scan.coverity.com/projects/boostorg-openmethod"><img src="https://scan.coverity.com/projects/32486/badge.svg" alt="Coverity Scan Build Status"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://codecov.io/gh/boostorg/openmethod/branch/develop"><img src="https://codecov.io/gh/boostorg/openmethod/branch/develop/graph/badge.svg" alt="codecov"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://pdimov.github.io/boostdep-report/develop/openmethod.html"><img src="https://img.shields.io/badge/deps-develop-brightgreen.svg" alt="Deps"></a></span></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><a class="image" href="https://www.boost.org/doc/libs/develop/libs/openmethod/doc/html/openmethod"><img src="https://img.shields.io/badge/docs-develop-brightgreen.svg" alt="Documentation"></a></span></p></td> </tr> </tbody> </table> </div> <div class="sect2"> <h3 id="_community">Community</h3> <div class="paragraph"> <p>Questions, suggestions, defect reports, etc can be submitted via the following channels:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://cpplang.slack.com/archives/C0A16HR702G">Slack</a>. Best for quick questions, especially for those getting started with the library.</p> </li> <li> <p><a href="http://www.boost.org/community/groups.html#main">The Boost developers mailing list</a>. Best for in-depth discussion of the features, future, and implementation of the library. Be sure to read the <a href="http://www.boost.org/community/policy.html">discussion policy</a> before posting. Please add the <code>[openmethod]</code> tag at the beginning of the subject line.</p> </li> <li> <p><a href="https://github.com/boostorg/openmethod/issues">Issues page on GitHub</a>. Best for bug reports. Please mention the Boost version, platform and compiler you are using, and provide a small compilable code sample to reproduce the problem. Also a good place for feature requests and suggestions.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_license">License</h3> <div class="paragraph"> <p>Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</p> </div> </div> </div> </div>