Между C ++ 0x, C ++ 03 TR1 и boost некоторые вещи, такие как function и bind, могут быть определены в 3 разных местах в зависимости от компилятора, например, для пакета функций VC pre VC9 у вас есть версии boost, а затем вы получаете они в но в пространстве имен std :: tr1 ::, а VC10 перемещает это только в пространство имен std ::.
В настоящее время мой существующий код использует более старые версии Boost в пространстве имён boost ::, однако, поскольку во многих моих приложениях и библиотеках все компоненты Boost, которые я использовал, теперь находятся в tr1 и C ++ 0x, id, если возможно, удалить усиление зависимости от них при сохранении обратной совместимости со старыми версиями компилятора.
Однако я не уверен, как сделать так, чтобы мой код находил, включал и затем имел доступ к правильным версиям :( Одна вещь, которую я рассмотрел, - это использование макросов, таких как _MSC_VER, чтобы увидеть, включает ли компилятор нужные мне классы, (возвращаясь к tr1 и затем увеличивая при необходимости), а затем используйте материал «using somenamespace :: someclass;» для перемещения рассматриваемых классов в пространство имен std ::.
Проблема в том, что в некоторых случаях это может привести к поломке, и я даже не уверен, как определить, установлен ли на VC9 пакет функций или установлен SP1 :( Я тоже не уверен в аккуратности чтобы сделать это, возможно, предоставьте свой собственный функционал .hpp, который делает требуемую «магию»?
Главное, я хочу начать писать свой код для новых стандартов, но так, чтобы он работал с минимальными усилиями на старых компиляторах.