草庐IT

c++ - Coverity 为使用 'cov-build' 的构建定义了哪些预处理器符号?

我们使用Coverity的ScanBuild为免费和开源项目提供服务。我正在研究关于受污染参数(TAINTED_SCALAR)的两个Coverity调查结果。污点是误报,因此我尝试使用Coverity的__coverity_tainted_data_sanitize__检测代码以清除问题。我想保护需要使用__coverity_tainted_data_sanitize__的代码,因为该函数仅用于使用Coverity的cov-build的分析构建。工具。也就是说,我想做类似的事情:voidFoo(std::istream&is,...){std::stringname;is>>name;

C++ - 最佳实践#define 只写一次的值?

在我们的代码中,我们需要处理配置,为此我们需要将配置名称作为std::string传递给我们自己的框架。示例代码:framework.handle_config("enable-radio-link")framework.handle_config("enable-tv-link")framework.handle_config("enable-gateway-link")soonto...n这些字符串将只写在一个地方,不会在其他任何地方重复。除了只有2或3个配置。我的队友希望将其作为#define并作为最佳实践使用。喜欢#defineENABLE_RADIO_LINK"enable-

c++ - 如何在运行时生成函数?

我正在尝试用C++编写中断服务例程,这里是一些代码片段voidhandlerProxy(intintrNo){}typedefvoid(*IntrHandler)();IntrHandlerIDT[256];我想像这样在运行时或编译时初始化IDT:for(size_ti=0;i问题是带捕获的lambda函数不能转换为函数指针我的代码将使用-fno-rtti进行编译,因此std::function::target不可用我有没有可能做到这一点?我不想手动编写IDT[0]=...IDT[1]=...或使用其他程序生成它。允许使用宏和内联asm。IDT的类型可以改变,但是IDT的元素应该是函数

c++ - 如何将 C/C++ 库代码封装为可在具有多个实例的单独线程中运行?

想象一个项目的开发时间跨度超过10年。有些部分是用C编写的,有些是用C++编写的,所有代码都使用了全局函数和全局变量。该架构本质上是单线程设计的,并以这种方式不断发展。但现在我们考虑使用众核架构。现在正在评估的一个想法是将一部分代码重构到一个库中,从而可以创建多个实例,以便它们可以在单独的线程中运行并且不会相互干扰。目前最受关注的提议是将所有库文件包装到具有宏定义的命名空间中,例如:namespaceVARIANT{//allthecode}然后在header或项目级别定义VARIANT。这将使在不同的命名空间中拥有不同的上下文成为可能。卖点是这种方法需要最少的代码更改,并且引入任何回

c++ - 用于创建结构的可变参数宏

我怎样才能写一个像这样使用的宏(用于gcc):CREATE_STRUCT(my_struct1,foo);CREATE_STRUCT(my_struct2,foo,bar);并扩展为structmy_struct1{std::stringfoo;};structmy_struct2{std::stringfoo;std::stringbar;};?我当然需要不同数量的成员的灵active,但对我来说已经很少了(大约4或5)。我发现了几个相关的问题,例如this和this,但是当我试图对这个问题应用这种神秘的宏魔法时,我完全迷失了。PS:我知道如何编写5个宏(每个参数一个)来完成这项工作

c++ - 在 C++ 中是否可以遍历抽象类的所有子类?

我在C++中有一个带有多个子类的抽象类。是否可以通过宏或模板元编程以某种方式做这样的事情:foreachsubclassofBase:mymap[subclass::SOME_CONSTANT]=newsubclass(); 最佳答案 不,你不能。显然,您想要的是一个工厂(或者可能是抽象工厂)。在C++中,您设置工厂类并注册构建器。classFooFactory{public:typedefstd::functionBuilder;///returnstrueiftheregistrationsucceeded,falseother

用于在编译时确定成员数量的 C++ 宏/元程序

我正在开发一个具有基于消息/异步代理类架构的应用程序。将有几十种不同的消息类型,每种都由C++类型表示。classmessage_a{longlongidentifier;doublesome_value;classsomething_else;...//manymoredatamembers}是否可以编写允许在编译时计算类中数据成员数量的宏/元程序?//例如:classmessage_b{longlongidentifier;charfoobar;}bitsetthebits;我不熟悉C++元编程,但是boost::mpl::vector可以让我完成这种类型的计算吗?

c++将宏变量转换为wchar字符串文字的简单方法

在下面的示例中,我想删除std::wstring(std::widen(...))部分,但是'#'宏只返回一个char字符串文字--有什么方法可以容纳wchar吗?#defineFOO_MACRO(className)\structclassName##Factory:publicOtherClass{\//doessomestuffhere\}className##Factory;\someMap->add(std::wstring(std::widen(#className),className##Factory)))我如何使用wchar做同样的事情?

c++ - 宏使用 GCC 编译但不使用 VS11

我编写了以下代码来帮助将我的模板函数限制为某些类型,并在使用其他类型时显示有意义的错误消息。我从stackoverflow中的另一个问题中得到了这个想法,我仍然无法对此发表评论,因为我是新来的。该宏在linuxGCC下可以完美编译,但不能在VisualStudio2012下编译。#include#include#include#include#include#defineISALLOWED(DerivedT)(std::is_same::value)||(std::is_base_of::value)#defineFE_1(WHAT,X)WHAT(X)#defineFE_2(WHAT,

c++ - 在 C++ 中将 projectDir 作为字符串或 char*

我看到了几个与这个主题相关的问题,但我没有找到简单通用的方法。我的问题是:如何在我的C++代码中将$(projectDir)或另一个宏作为string或char*?谢谢 最佳答案 如果你的编译器支持rawstrings然后您可以将MYMACRO=R"($(ProjectDir))";添加到预处理器定义(来自VisualStudio2013的屏幕截图):然后您可以将以下内容添加到您的代码中:#pragmamessage("MYMACRO=="MYMACRO)//willprintprojectdirduringcompilations