私はしばらくの間この問題にぶつかっていて、それを解決する方法を理解することができません。コンテキストは、C++のリフレクションシステムです。問題のスリムな説明はこれです。私はそれらの2つの構造体を持っています。1つは、ClassTypeタイプの複数の親を表すもので、もう1つは、Orphanクラス(ClassTypeタイプのクラスで、親がないもの)を表します。
template<typename ClassType, typename... ParentTypeList>
struct Parents
{
};
template<typename ClassType>
struct Parents<ClassType>
{
};
次に、反映されるクラスの宣言で、このマクロを使用します。クラスReflectionHelper::Parentsは上記のクラスです。
#define DEFINE_METACLASS(className, ...) \
private: \
typedef className SelfType; \
typedef ReflectionHelper::Parents<SelfType, __VA_ARGS__ > ParentList \
孤立したクラスの使用法は次のようになります。
class TestMetaClassDefine
{
DEFINE_METACLASS(TestMetaClassDefine);
};
ここで問題となるのは、__ VA_ARGS__が空であり、
typedef ReflectionHelper::Parents<SelfType, __VA_ARGS__ > ParentList;
したがって、は無効です。
これを解決するために私が考えた1つの方法は、デフォルトのテンプレート引数を使用することですが、可変個引数テンプレートでは許可されていません。
誰かがこの問題を解決するためのテクニックを持っていますか?
どうもありがとう