Clang 在编译过程中,是否有一种方便的方法可以将默认的标准库切换到自定义库?

Clang 在编译过程中,是否有一种方便的方法可以将默认的标准库切换到自定义库?,clang,Clang,我正在寻找一种方法,在编译期间将默认标准库切换到自定义库,而不使用外部脚本 我想将默认标准库切换为Boost或Facebook Folly,两者似乎都包含在默认标准库中。需要注意的是,它们使用自己的前缀,如boost::或folly::而不是std:: 正在讨论的编译器是叮当作响的++ 出于性能原因,我需要这样做来对自定义库进行基准测试,但我不想手动将整个代码库重构为自定义标准库 我喜欢在代码中保留std::,这样其他开发人员就不会感到困惑 这是否可以在clang中实现?创建一个名称空间nots

我正在寻找一种方法,在编译期间将默认标准库切换到自定义库,而不使用外部脚本

我想将默认标准库切换为Boost或Facebook Folly,两者似乎都包含在默认标准库中。需要注意的是,它们使用自己的前缀,如
boost::
folly::
而不是
std::

正在讨论的编译器是叮当作响的++

出于性能原因,我需要这样做来对自定义库进行基准测试,但我不想手动将整个代码库重构为自定义标准库

我喜欢在代码中保留
std::
,这样其他开发人员就不会感到困惑


这是否可以在clang中实现?

创建一个名称空间
notstd
,或其他一些清晰的名称,以唤起标准库而不自称是它

notstd
中,使用shared\u ptr=WHICH\u STL::shared\u ptr包含丰富的
模板

搜索并将
std::shared_ptr
替换为
notstd::shared_ptr
,并将
#include
替换为
#include

这就是工作

请注意,在
std
folly
boost
之间,相同命名的构造可能在细节上有所不同


更改
std
以引用除
std
之外的内容将使您的程序格式不正确,无需诊断,几乎100%确定。

创建一个名称空间
notstd
,或其他清晰的名称,以唤起标准库而不自称是它

notstd
中,使用shared\u ptr=WHICH\u STL::shared\u ptr包含丰富的
模板

搜索并将
std::shared_ptr
替换为
notstd::shared_ptr
,并将
#include
替换为
#include

这就是工作

请注意,在
std
folly
boost
之间,相同命名的构造可能在细节上有所不同



更改
std
以引用除
std
之外的内容将使您的程序格式不正确,无需诊断,几乎100%确定。

理想情况下,代码中没有
std
前缀,而应该有类似
stl
前缀的内容,和
#定义stl
到您想要使用的任何库提供程序。顺便说一句,我也对那些标准库中包含所有内容的库表示怀疑。例如,
boost
没有提供
cout
,这只是一个随机的例子。恕我直言,如果它说
std::
,这并不意味着标准库,我不想与您的源代码有任何关系。应该注意的是,
boost
folly
都需要一个正常工作的标准库才能正常工作。他们不能这样使用自己,你想做什么还不清楚。如果您有一个真正的替代STL实现,即按照标准的要求在
std
命名空间中定义名称,那么您需要告诉编译器使用这个库。例如,clang可以配置为使用libstdc++或libc++。
folly
并没有标准库中的所有内容。实际上,代码中没有
std
前缀,而是有类似于
stl
前缀的内容,以及
#define stl
到您想要使用的任何库提供程序。顺便说一句,我也对那些标准库中包含所有内容的库表示怀疑。例如,
boost
没有提供
cout
,这只是一个随机的例子。恕我直言,如果它说
std::
,这并不意味着标准库,我不想与您的源代码有任何关系。应该注意的是,
boost
folly
都需要一个正常工作的标准库才能正常工作。他们不能这样使用自己,你想做什么还不清楚。如果您有一个真正的替代STL实现,即按照标准的要求在
std
命名空间中定义名称,那么您需要告诉编译器使用这个库。例如,clang可以配置为使用libstdc++或libc++。
folly
没有标准库中的所有内容。我可以使用编译器插件来实现这一点吗?我认为手动替换可能会出现误报。@jeffbRTC如果你一件一件地进行,那么基于文本的搜索对于
std::shared_ptr
notstd::shared_ptr
的准确率将达到99%以上。然后编译器将捕获您所犯的任何错误。也许有重构工具可以帮你做到这一点,但我不知道有哪种重构工具会像“在这里搜索和替换”一样简单。我已经看到人们编写脚本,依赖于解析C++并基于该解析修改代码,但它是比这更复杂的情况。但是手动替换在大的代码库中花费了大量的时间,并且加上我想对DIF-LIBS进行基准测试。@杰夫一旦完成了上述操作,您可以在一个位置将一种类型替换为另一个库。和基准。我知道你想要这个是免费的,不会的。不同的库将有不同的API和不兼容性,无论如何都需要手工操作。我完全错过了你的notstd部分。可以为该名称空间添加代码吗?这是非常不清楚(但清楚的一些部分)<代码>#包括
这是如何工作的?没有称为notstd only命名空间的已编译库。它是如何包含内存的?我可以用编译器插件来实现吗?我认为手动替换可能会出现误报。@jeffbRTC如果你一件一件地进行,那么基于文本的搜索对于
std::shared_ptr
notstd::shared_ptr
的准确率将达到99%以上。然后编译器将捕获您所犯的任何错误。可能有重构工具可以做到这一点