我有一个三重层次结构类:
template<class T> class Singleton;
class Base;
class Sub : public Base, public Singleton<Sub>;
我使用底层自动指针,这就是为什么 Singleton 是一个模板类,而 Sub 将自己作为模板参数传递。我正在开发 Singleton 和 Base,公共 API 允许任何人添加自己的子类。我实际上想要一个像这样的真正的三重层次结构:
template<class T> class Singleton;
class Base : public Singleton<Base>;
class Sub : public Base;
这样外部开发人员就不必担心模板和复杂性。这样做的问题是,我在 Singleton 中的实现现在将在我创建 Sub 的实例时调用 Base 的构造函数(因为模板参数是 Base)。
我想知道这是否可以通过预处理器宏来完成:
template<class T> class Singleton;
class Base : public Singleton<__CLASS_NAME__>;
class Sub : public Base;
__CLASS_NAME__
将被预处理器替换的类名在哪里。理论上这应该是可能的,因为__PRETTY_FUNCTION__
宏实际上返回了类名。问题是无法进行字符串操作以从__PRETTY_FUNCTION__
.
关于如何实现这一点的任何想法,以便 Sub 类不知道从Singleton<template>
类继承?