Hayır - asla bunu yapmayın!
Bu imkansız, yanlışlıkla çökmelere neden olacaksınız.
tek yolu ad adlandırma kullanıyor düzgün halletmek için: farklı ad yerleştirilen alternatif boost sürümünü oluşturmak yani.
BCP'nin son sürümü bu seçeneği sunar. Yani, boost_1_43 gibi bir şey yerine destek kullanacaksınız. Ama sizin için oldukça şeffaf olacak. Ancak yine de, aynı cpp dosyasında iki yükseltme sürümünü kullanamayacağınız için 'un farkında olmalısınız.
Ayrıca bu tartışma üzerine bir göz atın: Creating Library with backward compatible ABI that uses Boost
sevdim senaryo, ad alanını yeniden adlandırır tanımlar ve aslında
#include <boost/foo.hpp>
#include <myboost/bar.hpp>
boost::foo f;
myboost::bar b;
Boost BCP buna izin vermez
gibi boost iki sürümlerini içerebilir böylece içerir .
Ancak bazı kütüphaneler boost öneki olmadan, :: iplik artırmak ve artırmak :: regex en C API (regexec, regcomp) extern "C" sembolleri dışa olarak hala dikkatli olmalıdır
Düzenleme
böyle konunun örnek olarak aşağıdaki dosyaları oluşturun:
a.cpp:
template<typename Foo>
Foo add(Foo a, Foo b)
{
return a+b;
}
int foo(int x,int y)
{
return add(x,y);
}
b.cpp:
template<typename Foo>
Foo add(Foo a, Foo b)
{
return a-b;
}
int bar(int x,int y)
{
return add(x,y);
}
testi.cpp:
30 -10
Ama
30 30
veya
alırsınız:
g++ a.cpp b.cpp test.cpp
Sen beklenebilir:
#include <iostream>
int foo(int,int);
int bar(int,int);
int main()
{
std::cout<< foo(10,20) <<" " <<bar(10,20) << std::endl;
}
bunları derlemek
-10 -10
Bağlantı sırasına bağlı olarak. Farklı derleme birimlerinde yerleştirilirse
Yani yanlışlıkla diğer baskının sembolleri kullanmak ve bu program sembolü
int add<int>(int,int)
aynı çökebilir iki artırmak sürümlerini kullanan aynı sembole bile çözümlenir.
+1 - cevabınızın ilk yarısına katılmama rağmen. – richj
@richj - tüm bağlantıların açık olduğu DLL platformları altında mümkündür, ancak ELF için kötü şeyler (deneyimden) gerçekleşir – Artyom