Шаблоны C ++ и производные классы

Я пытаюсь понять следующий код. Производная — это производная структура от 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;
};

6

Решение

Это реализация Член Детектор Идиома. Оно использует SFINAE чтобы проверить, есть ли у типа T член с именем flow,

Изменить: запятая часть, о которой вы спрашиваете множественное наследование. Struct Derived (публично) наследуется от и то и другое T и Fallback.

6

Другие решения

Это просто множественное наследование. Следующее является Derived что происходит от T (и не дает дальнейшего определения):

struct Derived : T { };

И следующее является Derived что происходит от обоих T а также Fallback:

struct Derived : T, Fallback { };

То есть, Derived унаследует членов T а также члены Fallback, В этом случае, так как Derived это структура, наследование по умолчанию общественное наследство.

2

Это значит:

внутри определения has_FlowTraits structВы также определяете новый struct который называется Derived,

Вы говорите, что это структура Derived наследует тип T и тип Fallback, (Если вы посмотрите на строку раньше, struct Fallback только что был определен).

{} просто означает, что больше нет деталей реализации. Больше нет необходимости в определении метода или атрибута, чтобы этот тип был полезным.

1

Запятая означает, что она получается публично или в частном порядке (в зависимости от того, T или же Fallback является структурой или классом) из этих двух классов. Запятая просто включает те классы, как те, из которых Derive выведет.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector