goo*_*ons -1 c++ inheritance templates classname
我有一个三层次的类:
template<class T> class Singleton;
class Base;
class Sub : public Base, public Singleton<Sub>;
Run Code Online (Sandbox Code Playgroud)
我使用底层自动指针,这就是为什么Singleton是模板类而Sub将自身作为模板参数传递的原因.我正在开发Singleton和Base,公共API允许任何人添加自己的子类.我实际上想要一个像这样的真正的三层结构:
template<class T> class Singleton;
class Base : public Singleton<Base>;
class Sub : public Base;
Run Code Online (Sandbox Code Playgroud)
这样外部开发人员就不必担心模板和复杂性.这个问题是我在Singleton中的实现现在每当我创建一个Sub实例时都会调用Base的构造函数(因为模板参数是Base).
我想知道这是否可以通过预处理器宏完成:
template<class T> class Singleton;
class Base : public Singleton<__CLASS_NAME__>;
class Sub : public Base;
Run Code Online (Sandbox Code Playgroud)
哪个__CLASS_NAME__类名将由预处理器替换.从理论上讲,这应该是可能的,因为__PRETTY_FUNCTION__宏实际上返回了类名.问题是,无法执行字符串操作以从中删除函数名称__PRETTY_FUNCTION__.
关于如何实现这一点的任何想法,以便Sub类不知道继承自Singleton<template>类?
这样外部开发人员就不必担心模板和复杂性.
不可能.设计Base和Singleton以删除将模板参数传递给Singleton的要求的唯一方法是将其传递给Base,这没有任何改进.
此外,可以合理地预期C++开发人员将能够使用CRTP.
最后,单身人士以最恐怖的方式吮吸.如果您重视自己的理智,请立即删除.