Название: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: __Heaven__ от Ноябрь 15, 2016, 07:36 Привет, друзья!
Прошу помочь с вопросом, как мне реализовать сабдж? Предлагаю выполнить на примере std::swap. Пробовал через Код В gcc всё работает, а clang выдаёт ошибку. Как будет правильно по стандарту выполнить специализацию? Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: m_ax от Ноябрь 15, 2016, 08:21 Цитировать В gcc всё работает, а clang выдаёт ошибку. Как будет правильно по стандарту выполнить специализацию? Наверное так:Код
Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: __Heaven__ от Ноябрь 15, 2016, 09:21 Ещё noexcept просит.
https://godbolt.org/g/lUOqDe (https://godbolt.org/g/lUOqDe) Почему-то в моём проекте не требуется noexcept, а при его наличии выдаёт ошибку. Почему может так разниться? Использую c++14 Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: m_ax от Ноябрь 15, 2016, 11:49 Цитировать Ещё noexcept просит. Ну так дайте)Код
Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: __Heaven__ от Ноябрь 15, 2016, 12:08 Дык дал :)
Не понимаю, почему разнится способ реализации. Как правильно делать специализацию по стандарту? Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: schmidt от Январь 08, 2017, 19:35 Привет, друзья! Прошу помочь с вопросом, как мне реализовать сабдж? Предлагаю выполнить на примере std::swap. Пробовал через Код В gcc всё работает, а clang выдаёт ошибку. Как будет правильно по стандарту выполнить специализацию? Эмм... что у вас там работает - неясно, ничего работать не должно ;D Объявление и реализация шаблонного класса в принципе стиснута рамками одного header-файла. Прежде чем специализировать шаблонный класс компилятору требуется его полное определение. Я в свое время тоже маялся этой манией написать короткое чистенькое объявление класса в .h, а детали, как полагается вынести в .cpp, но все закончилось бесконечными ошибками компиляции. И только позже из документации/книг по шаблонам узнал, что компилятор не ползает по разным файлам в поисках частей одного и того же шаблона. Название: Re: Специализация шаблона с расширением std и разделением объявления и реализации Отправлено: __Heaven__ от Январь 09, 2017, 13:24 Прежде чем специализировать шаблонный класс компилятору требуется его полное определение. Я в свое время тоже маялся этой манией написать короткое чистенькое объявление класса в .h, а детали, как полагается вынести в .cpp, но все закончилось бесконечными ошибками компиляции. И только позже из документации/книг по шаблонам узнал, что компилятор не ползает по разным файлам в поисках частей одного и того же шаблона. Речь идёт не о шаблонном классе, а о шаблонной функции. Вы уверены, что для специализации требуется полное определение?Ничто мешает отделять объявление от определения функции внутри одного h файла. Также ничто не мешает выносить определения в отдельный h файл и инклудить его после объявлений. |