Please check out the library's documentation to learn more.
You are viewing the develop version of this library.
The master and develop pages are shown here to provide access to the newest in-development in-progress documentation. See the "Documentation" link on this page.
Other aspects of the page will reflect the previous official version, or not be available until the next release.
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>