首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Boost.Regex _MANAGED (C++/CLI)在非C++03模式下编译_MANAGED 1.76?

用Boost.Regex _MANAGED (C++/CLI)在非C++03模式下编译_MANAGED 1.76?
EN

Stack Overflow用户
提问于 2021-05-17 08:55:49
回答 1查看 183关注 0票数 2

TL;博士

是否可以使用C++/CLI (即Boost.Regex项目,即_MANAGED项目)以头纯模式(非BOOST_REGEX_CXX03模式)编译/clr 1.76?

多年来,我们一直在常规的VisualC++项目中使用Boost.Regex。我们的一些项目是用Common Language Runtime Support (/clr)编译的,它支持C++/CLI (对于这些项目,我们总是静态地在boost regex库中链接)。我们总是预先构建boost正则表达式、DLL和静态库,然后从MSVC链接它们。

现在,除非在用Boost 1.76模式下编译,否则新的Boost.Regex仅是标头。

( 1.76.0版). Regex:

  • 除了在C++03模式下,Regex现在仅是头。
  • 现在不再支持C++03了。
  • ..。

但是,我们的C++/CLI项目将--通过boost配置魔术--自动选择在C++03 == BOOST_REGEX_CXX03模式下构建==!

  • 我们现在的MSVC是VisualStudio19.7.6,_MSC_FULL_VER 192729112

由于不再需要预先构建任何Boost.Regex二进制文件将非常方便,我们目前正在研究是否可以让C++/CLI项目在 BOOST_REGEX_CXX03模式下编译:

  • 有人知道如何通过boost/config的魔力为C++ _MANAGED项目选择宏_MANAGED吗?(我目前怀疑_CPPLIB_VER,但我甚至不确定这是什么版本。)
  • 我们能换一下这个吗?->

是否可以使用C++/CLI (即/clr ,即 _MANAGED 项目?)在标头模式下编译Boost.Regex 1.76

EN

回答 1

Stack Overflow用户

发布于 2021-05-17 12:35:50

要快速回答这个问题:No在C++11模式下编译Boost.Regex是不可能的,这是非C++03模式,带有/clr标志。

BOOST_REGEX_CXX03/clr下被选中的原因是,如果设置了任何... BOOST_NO_CXX11_HDR_MUTEX ... BOOST_NO_CXX11_HDR_ATOMIC ...boost\regex\config.hpp就会选择它,而则是在... BOOST_NO_CXX11_HDR_MUTEX ... BOOST_NO_CXX11_HDR_ATOMIC ...下设置的,因为C++/CLI只支持C++03,或者更确切地说,它支持所有C++03,而例如在C++/CLI中不支持std::mutex

As 其他人写了

它不受支持,因为std::mutex实现使用GetCurrentThreadId()。这是一个不应该在托管代码中使用的winapi函数,因为它可能运行在不使用线程实现线程的自定义CLR主机上。 这是一个很好的问题,它表明您正在构建错误的代码。您的本机C++实际上是用/clr编译的。它工作得太好了,所有符合C++03的代码都可以编译成MSIL .

因此,您需要在翻译单元中使用Boost.regex (编译的/clr ),必须使用C++03模式。

至于OP问题:应该检查使用C++/CLI的给定VC++项目是否真的需要编译所有带有/clr on的文件,或者实际上使用Boost.Regex的翻译单元无论如何都是原生的C++,可以不使用/clr编译,然后与C++/CLI对象文件链接在一起。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67566702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档