如果C ++程序是用-D_GLIBCXX_DEBUG
编译的,那么有一种方法可以在其源代码中指定对于std::vector
类型的特定变量,我不希望此类的“调试”版本但是使用“普通”版本呢?
我的用例如下:
我有一个提供C接口的C库(称为libA
)和一个C ++库(称为libB
)。这些库尚未使用-D_GLIBCXX_DEBUG
进行编译。主程序(使用-D_GLIBCXX_DEBUG
编译)必须调用libA
的函数,并将传递给std::vector<char>*
的函数传递给void*
。 libA
调用一个给定libB
的{{1}}函数,并将其转换回void*
以使用它(哦,通过C层传递C ++数据的乐趣。 )。由于主程序是使用std::vector<char>*
编译的,但不是-D_GLIBCXX_DEBUG
编译的,因此,主程序和libB
中的std::vector<char>
类实际上具有不同的实现,这会导致错误。
答案 0 :(得分:1)
创建void* createNDebugVec(char const* begin, char const* end);
函数并将其放在自己的.cpp文件中可能是最可靠的。在该.cpp文件中,在包含任何内容之前,先显式#undef GLIBCXX_DEBUG
。这使您可以创建非调试std::vector
并将其预制返回到void*
。您可能需要匹配的void destroyNDebugVec(void*);
。
请注意,出于相同的原因,void* createNDebugVec(std::vector<char> const& src);
将不起作用。
答案 1 :(得分:0)
您可以#undef _GLIBCXX_DEBUG
,然后再在主程序中使用#include<vector>
。
请确保我将声明一个继承自std::vector<char>
的非模板类,在其中您使用#undef _GLIBCXX_DEBUG
技巧并使用此类的实例将数据传递给libB。