Skip to content

Custom static polymorphism

一、C++除了语言内置的static polymorphism,还支持让用户自己建立起static polymorphism,这极大的增加了C++语言的灵活性。

二、本章总结C++中,实现custom static polymorphism的idiom,它们涉及了C++ generic programming、template metaprogramming。

cppreference sfinae # Alternatives

Where applicable, tag dispatch, static_assert, and, if available, concepts, are usually preferred over direct use of SFINAE.

NOTE:

1、上述这些都是custom static polymorphism

enum dispatch VS tag dispatch

enum是named constant,而tag是type。它们都可以用来实现static dispatch,但是实现的成本、方式确实不同的:

1) tag可以用作type parameter,而enum无法,它如果要用于template,则需要使用SFINAE

TODO: 发展概述

随着C++的发展,解决这些问题的idiom/technique也在不断发展,所以本章会以发展的视角总结解决这些问题的idiom/technique。

1、trait

2、sfinae

3、enable_if

4、tag dispatch

5、void_t C++17

6、concept C++20

7、constexp if C++17

TODO

Google c++ static polymorphism on enum values

fluentcpp When to Use Enums and When to Use Tag Dispatching in C++

stackoverflow Polymorphic Enum in C++