Sorunun başlığı uygun olduğundan emin değilim. İşte problem. Bazı C++ 11 kütüphane özelliklerini kullanan bir kütüphane yazıyorum. Açıkçası, tüm uygulamaların bu kütüphaneleri desteklemediği ve bu nedenle taşınabilirlik problemi olduğu söylenemez. Burada hangi kütüphanenin ilgilendiği önemli değildir. Bir çözüm zaten çok fazla C++ 11 kütüphanesi sağlayan takviye kullanmaktır. Bu yüzden benim çözümüm, bir makro tanımlamaktır, USE_CXX11
deyin ve internal
adında yeni bir ad alanı tanımlayın ve isimleri makrolara bağlı olarak bu iç ad alanına girin. Mesela,isimli birC++ kütüphanesinden <boost/foo/foo.hpp>
numaralı telefondan da kullanılabilir. Ne yapmamC++ sarmalayıcı için boost/C++ 11
#ifdef USE_CXX11
#include <foo>
#else
#include <boost/foo/foo.hpp>
#endif
namespace internal {
#ifdef USE_CXX11
using std::foo;
#else
using boost::foo::foo;
#endif
}
Ve kütüphanede geri kalanında sadece internal::foo
kullanın. Bu kitaplığı kullanan üçüncü taraf kodu, çalışan bir C++ 11 uygulamasının olup olmadığını göstermek için uygun makroyu tanımlayabilir veya yalnızca artırmayı kullanabilir. Ve kütüphanem sağ üstbilgi ve ad alanı alacak. Bu şimdiye kadar çalışıyor. Umarım niyetimi iyi açıkladım. Ancak, yukarıdaki çözümler bana çok çirkin görünüyor. Bu tür şeyler için daha iyi bir uygulama var mı? Yoksa bu yaklaşımın işe yaramayacağı muhtemel durumlar var mı?
Kontrol dışarı Boost.Algorithms kütüphanede (yaklaşan 1.50 sürümde yeni) ** Boost.TR1 ** –
o Kuvvetlendirme ve sen desteklemek gerekiyorsa güncel olmayan derleyiciler, sadece Boost doğrudan kullanın. –
Neden destek kullanmıyorsunuz? – fbafelipe