C++从"NameBase"类到模板"Name"类的相互关系的成语(或模式)
C++ idiom (or pattern) with interheritance from `NameBase` class to template `Name` class
我不时在不同的C++项目中遇到以下(或类似的东西(类层次结构:
class DummyBase
{
public:
virtual ~DummyBase() {}
virtual void doSomething() = 0;
};
template<typename T>
class Dummy : public DummyBase
{
public:
void doSomething() override
{
...
}
private:
T field;
};
看起来像C++成语,模式或技巧。你能告诉我这个构造的目的以及使用它可以解决的问题吗?我很乐意阅读好文章或描述它的书籍。
这是基于多态的类型擦除,它通常用于处理诸如std::function
或std::any
之类的东西,它们可以以完全相同的方式存储不相关类型的数据(例如,用于std::function
的函数指针和成员函数指针(。
相关文章:
- 如何在C++中最好地实施"newtype"成语?
- C++14 中unordered_map矢量和擦除删除成语的奇怪行为
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 可以使用while(文件>>...C++成语在 Cython 中读取文件?
- 痘痘成语和交换
- C++从"NameBase"类到模板"Name"类的相互关系的成语(或模式)
- 范围TS成语和神秘的汽车&&
- 检测功能失败static_assert成语
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 擦除删除成语的性能增益从何而来
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 我必须安装"libbitcoin-server"才能包含"bitcoin.hpp"
- 为什么擦除-删除成语不适用于反向迭代器
- C++ 在痘痘成语中,在类前或成员之前向前声明
- C 检测成语,没有void_t
- C PIMPL成语,类模板和void模板参数
- 擦除remove_if成语 - 删除了什么吗?
- 具有模板成员函数的痘痘成语