0
На каком-то ресурсе я увидел код:Шаблон синтаксис Объяснение
struct C
{
template <typename T, typename = typename enable_if<!is_same<C, typename decay<T>::type>{}>::type>
C(T&& f){}
}
Я старался изо всех сил, но все еще нуждаются в уточнении. Я знаю, что эта страшная вещь нужна для идиомы SFINAE
- если что-то не работает, шаблонная функция просто не будет создана. Вот что я нашел:
typename decay<T>::type
- это снимает отборочные резюме от типаT
, или преобразует массивT
указателюT
или преобразуетT
функционировать указатель. Но что это такоеtypename
? Я полагаю, что это связано с зависимым типом, т. Е. Поставляемый типT
- это вещь, которая является частью другого шаблона, не так ли?is_same<A, B>{}
- что это такое{}
брекеты здесь? Зачем?typename enable_if<A>::type
- как я понял, еслиA
, истинноtype
поле существует и в этом случае этоvoid
, так как только один аргумент был переданenable_if
, верно? Но опять же - что это заtypename
?template <typename T, typename = typename A>
- что это такоеtypename = typename A
? Где вообще имя аргумента ?!