LINUX.ORG.RU

boost::asio вопрос по принципу работы кода из примеров

 , , ,


0

2

Добрый день.
Вот ссылка на пример из документации к boost::asio
Ссылка
В конце есть такой код:

class match_char
{
public:
  explicit match_char(char c) : c_(c) {}

  template <typename Iterator>
  std::pair<Iterator, bool> operator()(
      Iterator begin, Iterator end) const
  {
    Iterator i = begin;
    while (i != end)
      if (c_ == *i++)
        return std::make_pair(i, true);
    return std::make_pair(i, false);
  }

private:
  char c_;
};

namespace asio {
  template <> struct is_match_condition<match_char>
    : public boost::true_type {};
} // namespace asio
...
void handler(const boost::system::error_code& e, std::size_t size);
...
boost::asio::streambuf b;
boost::asio::async_read_until(s, b, match_char('a'), handler);
У меня вопрос по участку:
namespace asio {
  template <> struct is_match_condition<match_char>
    : public boost::true_type {};
} // namespace asio
Что это значит? У меня есть предположение: Здесь указывается явная специализация для шаблона template <> struct is_match_condition для типа match_char, а дальнейшая реализация для этой специализации берется из boost::true_type с помощью наследования. Прав ли я?

★★★★★

Ты прав. Разве что можно придраться к формулировке

дальнейшая реализация для этой специализации берется из boost::true_type с помощью наследования

Но в целом да, специализированный шаблонный класс наследуется от true_type.

staseg ★★★★★ ()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от staseg

Конечно ламерский вопрос, но чем отличиается объявление класса с использованием ключевого слова struct от объявления с использованием слова class ?

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

причем там область видимости, если отличие в модификаторах доступа?

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

А все остальное (поведение конструкторов, деструкторов, наследование, перегрузки и многие другие особенности) идентично?

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

Идентично, но это не повод как попало расставлять class и struct. Обычно struct используется только когда все члены класса public, а методов нет или почти нет. Т.е. сам факт называния struct позволяет сразу понять, что перед тобой скорее сишная структура, чем плюсовый класс. Что немного улучшает читабельность кода.

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

наследование

Наследование тоже по умолчанию public, а не private, как у классов.

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