Я уже некоторое время решаю эту проблему и не могу понять, как ее решить. Контекст является системой отражения в C ++. Объяснение проблемы заключается в следующем. У меня есть эти 2 структуры. Одним из них является представление нескольких родителей типа ClassType, а другим - класс 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;
недопустимо.
Один из способов решить эту проблему - использовать аргументы шаблона по умолчанию, но это не разрешено для шаблона с переменным числом аргументов.
У кого-нибудь есть техника для решения этой проблемы?
Большое спасибо