Использование классов C++ типа function, которые могут быть определены в нескольких разных местах

Между C++0x, C++03 TR1 и boost некоторые вещи, такие как function и bind могут быть определены в 3 разных местах в зависимости от компилятора, например, для VC pre VC9 feature pack у вас есть boost версии, затем вы получаете их в но в пространстве имен std::tr1::, а VC10 перемещает это только в пространство имен std::.

В настоящее время мой существующий код использует исключительно старые версии boost в пространстве имен boost::, однако, поскольку для многих моих приложений и библиотек все используемые мною boost вещи теперь находятся в tr1 и C++0x, я хотел бы, если возможно, удалить зависимость от boost из них, сохранив при этом обратную совместимость со старыми версиями компиляторов.

Однако я не уверен, как заставить мой код находить, включать и затем иметь доступ к правильным версиям :( Одно, что я рассматривал, это использование макросов типа _MSC_VER, чтобы увидеть, включает ли компилятор нужные мне классы, (возвращаясь к tr1 и затем к boost по мере необходимости) и затем использовать "using somenamespace::someclass;" материал для перемещения классов в пространство имен std::.

Проблема в том, что в некоторых случаях это может привести к поломке, и я даже не уверен, как определить, установлен ли на VC9 его feature pack или SP1 или нет :( Я также не уверен в аккуратном способе сделать это, возможно, предоставить мой собственный functional.hpp, который делает необходимую "магию"?

Главное, я хочу начать писать свой код для новых стандартов, но так, чтобы он по-прежнему работал с минимальными усилиями на старых компиляторах.

8
задан ildjarn 6 November 2012 в 23:13
поделиться