Я пытаюсь понять следующий код. Производная — это производная структура от T, и что означает «,», а затем Fallback {}
template <class T>
struct has_FlowTraits<T, true>
{
struct Fallback { bool flow; };
struct Derived : T, Fallback { }; //What does it means ?
template<typename C>
static char (&f(SameType<bool Fallback::*, &C::flow>*))[1];
template<typename C>
static char (&f(...))[2];
public:
static bool const value = sizeof(f<Derived>(0)) == 2;
};
Это реализация Член Детектор Идиома. Оно использует SFINAE чтобы проверить, есть ли у типа T член с именем flow
,
Изменить: запятая часть, о которой вы спрашиваете множественное наследование. Struct Derived (публично) наследуется от и то и другое T и Fallback.
Это просто множественное наследование. Следующее является Derived
что происходит от T
(и не дает дальнейшего определения):
struct Derived : T { };
И следующее является Derived
что происходит от обоих T
а также Fallback
:
struct Derived : T, Fallback { };
То есть, Derived
унаследует членов T
а также члены Fallback
, В этом случае, так как Derived
это структура, наследование по умолчанию общественное наследство.
Это значит:
внутри определения has_FlowTraits struct
Вы также определяете новый struct
который называется Derived
,
Вы говорите, что это структура Derived
наследует тип T и тип Fallback
, (Если вы посмотрите на строку раньше, struct Fallback
только что был определен).
{}
просто означает, что больше нет деталей реализации. Больше нет необходимости в определении метода или атрибута, чтобы этот тип был полезным.
Запятая означает, что она получается публично или в частном порядке (в зависимости от того, T
или же Fallback
является структурой или классом) из этих двух классов. Запятая просто включает те классы, как те, из которых Derive
выведет.