LINUX.ORG.RU

C++, темплейты, букварь

 , , ,


0

1

Как починить предпоследнюю строчку? Там где-то typename надо вставить, да?

template <int N>
struct int_ {
	static constexpr int value = N;
	using type = int_<N>;
};

template <typename T>
struct foo {
	template <int N>
	struct boo {
		using type = int_<N>;
	};
};

template <typename T>
auto fun (T a) {
	using type = foo<T>::boo<4>::type; // ошибка
}
★★

Могу ошибаться, я не вникал в код, но скорее всего это:

using type = typename foo<T>::boo<4>::type; // ошибка

m0rph ★★★★★ ()

template перед boo поставь

anonymous ()
using type = typename foo<T>::template bar<4>::type
anonymous ()

букварь

Это уже не букварь, это дебри леса костылей.

crowbar ()
Ответ на: комментарий от crowbar

Это базовые знания, ибо касаются синтаксиса языка.

Да, решение использовать неоднозначные <> для шаблонов спорно. Но можно ли было придумать что-то лучше в условиях синтаксической совместимости с си? Все не так просто.

anonymous ()
Ответ на: комментарий от anonymous

Это базовые знания, ибо касаются синтаксиса языка.

Как-то не сталкивался, даже у Александрески этого "::template" не было. С typename все понятно.

crowbar ()

сколько извращений лишь бы тюрингполные компайлтайм макросы не делать

Bad_ptr ★★★ ()
Ответ на: комментарий от crowbar

У Алексаедреску не было(хотя надо бы посмотреть) потому, что не потребовалось. И у него не учебник по плюсам. Но он любит про это говорить в разговорах о D.

У Страуструпа есть, у Саттера есть.

anonymous ()
Ответ на: комментарий от Bad_ptr

А они тут ни при чем. Шаблоны не альтернатива им и они не альтернатива шаблонам. Шаблоны интегрированы в язык(см. инстанцирование, вывод шаблонных параметров для шаблонов функций и пр.), макросы ему(языку) ортогональны.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.