tr1: повышение по сравнению с 2010, с использованием shared_ptr без пространства имен - PullRequest
0 голосов
/ 19 февраля 2012

пытается скомпилировать старый проект, который часто использует shared_ptr с vs2010.Итак, у меня есть предварительно скомпилированный заголовок (stdafx.h) с:

..
с использованием пространства имен std;..

# включает «boost / shared_ptr»
с использованием boost для пространства имен;

и более поздних версий в коде, где я интенсивно использую shared_ptr spObject;

Что следуетЯ изменяю в stdafx.h так, что мне не нужно будет везде заменять код * shared_ptr * на * some_namespace :: shared_ptr *?
Можно ли обойтись без конфликтов пространства имен boost / boost :: tr1 / std:: tr1 / std?

Теперь у меня много ошибок:

ошибка C2872: «shared_ptr»: неоднозначным символом может быть «k: \ boost10 \ boost \ smart_ptr \»shared_ptr.hpp (165): boost :: shared_ptr 'или' c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ include \ memory (1418): std :: tr1 :: shared_ptr '

1 Ответ

4 голосов
/ 29 мая 2012

Не помещайте using namespace в заголовки, так как вы обнаружили, что это может нарушить последующие заголовки, и поскольку вы не можете изменить эти заголовки, с этим ничего не поделаешь.

В области действия функции вы можете использовать объявление использования для устранения неоднозначности:

void f()
{
  using std::tr1::shared_ptr;
  shared_ptr<int> p;
}

Но это не сработает в глобальном пространстве имен, потому что вы уже загрязнили эту область неосторожными директивами using.

...