Typedef внутри / снаружи анонимного пространства имен? - PullRequest
6 голосов
/ 05 декабря 2009

В файле .cpp есть ли разница / предпочтение в любом случае?

// file scope outside any namespace
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;

v / s

namespace { // anonymous
  using X::SomeClass;
  typedef SomeClass::Buffer MyBuf;
}

Ответы [ 2 ]

7 голосов
/ 05 декабря 2009

Я бы сказал, что второе использование довольно редко, по крайней мере, в коде, который я видел до сих пор (и я видел довольно много C ++ кода). Не могли бы вы объяснить причины второго метода?

Обычно вы будете использовать анонимное пространство имен в файле реализации C ++ для достижения того же, что и «static», сделавшего в C (или C ++, но мы его замаскируем), а именно, ограничение видимости символов до текущий переводческий блок. На самом деле typedef не создает символы, которые экспортируются для компоновщика, так как они не создают ничего «конкретного» в смысле чего-то конкретного, с чем вы можете связать.

Моя рекомендация? Я бы пошел с первой записью. Второй добавляет ненужные осложнения и, на мой взгляд, ничего вам не дает.

5 голосов
/ 05 декабря 2009

Нет особого смысла размещать typedef в анонимных пространствах имен. Основное использование анонимных пространств имен состоит в том, чтобы избежать столкновения символов между единицами перевода, помещая определения с внешней связью в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...