私はトリプル階層クラスを持っています:
template<class T> class Singleton;
class Base;
class Sub : public Base, public Singleton<Sub>;
基になる自動ポインターを使用しているため、Singleton はテンプレート クラスであり、Sub はそれ自体をテンプレート パラメーターとして渡します。私はシングルトンとベースを開発しており、パブリック 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__
。
サブクラスがクラスからの継承を認識しないように、これを達成する方法についてのアイデアはありSingleton<template>
ますか?