C++ 习语(或模式)具有从 `NameBase` class 到模板 `Name` class 的继承
C++ idiom (or pattern) with interheritance from `NameBase` class to template `Name` class
我有时会在不同的 C++ 项目中遇到以下(或类似的)class 层次结构:
class DummyBase
{
public:
virtual ~DummyBase() {}
virtual void doSomething() = 0;
};
template<typename T>
class Dummy : public DummyBase
{
public:
void doSomething() override
{
...
}
private:
T field;
};
看起来像 C++ 惯用语、模式或技巧。你能告诉我这个结构的目的以及使用它可以解决什么问题吗?我很乐意阅读描述它的好文章或书籍。
这是基于多态性的 type erasure,它通常用于处理诸如 std::function
或 std::any
之类的事情,它们可以以完全相同的方式存储不相关类型的数据(例如函数指针和 std::function
).
的成员函数指针
我有时会在不同的 C++ 项目中遇到以下(或类似的)class 层次结构:
class DummyBase
{
public:
virtual ~DummyBase() {}
virtual void doSomething() = 0;
};
template<typename T>
class Dummy : public DummyBase
{
public:
void doSomething() override
{
...
}
private:
T field;
};
看起来像 C++ 惯用语、模式或技巧。你能告诉我这个结构的目的以及使用它可以解决什么问题吗?我很乐意阅读描述它的好文章或书籍。
这是基于多态性的 type erasure,它通常用于处理诸如 std::function
或 std::any
之类的事情,它们可以以完全相同的方式存储不相关类型的数据(例如函数指针和 std::function
).