小编Bri*_*ian的帖子

避免链接到libstdc ++

我正在开发一个目前在Linux和uClibc中使用C的嵌入式项目.我们有兴趣将它转移到C++,但我不希望与libstdc ++中的链接相关的开销.我的印象是,如果我们不使用STL中的任何内容,例如iostream或vector,这是可能的.

如何在不链接到libstdc ++的情况下直接编译g ++?

c++ linux linker gcc libstdc++

15
推荐指数
2
解决办法
5334
查看次数

如何为具有复合窗口小部件的表单设置Qt Tab顺序?

我有一个用Qt Designer编写的表单,其中包含一个QWidget,它被提升为我拥有的自定义小部件.自定义小部件包含几个组合框.我希望表单具有合理的Tab键顺序,焦点从自定义小部件之前的小部件移动,然后通过自定义小部件中的组合框,然后在自定义小部件之后继续到小部件.因此,我将QWidget设置为在Designer中具有选项卡焦点,但自定义窗口小部件无法正确处理焦点.

我可以使用QWidget :: setTabOrder解决这个问题,但这会很麻烦,因为我必须从外部进入自定义小部件.或者,我可以为自定义小部件提供成员函数来设置Tab键顺序.理想情况下应该有一个更简单的方法.在那儿?

c++ qt qwidget

9
推荐指数
0
解决办法
3457
查看次数

MSVC6如何处理来自extern"C"函数的异常?

我正在研究用Visual Studio 6编写的应用程序(我知道,FML),它使用LoadLibrary和调用DLL中的函数GetProcAddress.较新的代码无法在VC6中编译,需要更新的编译器.DLL有一些构造C++对象的函数,然后VC6程序通过抽象类使用该对象.

这通常很好用,但是当GetProcAddress抛出异常检索的函数时它会遇到问题- 即使在DLL中捕获异常时也是如此.我注意到,当抽象类的方法抛出异常时,这不会发生.在这种情况下,事情正常.

我在这做错了什么?如何使VC6生成代码以正确处理异常?

编辑:这是一个导致程序崩溃的函数示例:

extern "C" __declspec(dllexport) Box* getBox(const char* addr)
{
    try {
        return createBox(addr);
    } catch (std::exception& ex) {
        LOG_ERROR("Open failed: " << ex.what());
        return 0;
    } catch (...) {
        LOG_ERROR("Error while opening.");
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ exception visual-studio

5
推荐指数
1
解决办法
303
查看次数

在boost :: bind中使用boost信号

我正在尝试将boost :: signal的触发包装到boost :: bind对象中.所以我想要的是在调用boost :: function时用一些预先打包的参数调用信号.

我有的是这个:

boost::signals2::signal<void(int)> sig;
boost::function<void()> f = boost::bind(
    &(sig.operator()), &sig, 10);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我收到以下错误:错误:没有匹配函数调用bind(,...

我也试过这个:

boost::function<void()> f = boost::bind(
    (void(boost::signals2::signal<void(int)>::*)(int))
    &(sig.operator()), &sig, 10);
Run Code Online (Sandbox Code Playgroud)

但后来我得到了"没有上下文类型信息的重载函数的地址".

那么什么是正确的语法?

c++ boost boost-bind boost-signals

4
推荐指数
1
解决办法
3054
查看次数

如何从一个配置中排除CMake目标?

我最近在CMake项目中添加了一个模块,该模块依赖于我只针对发行版CRT编译的库.在CMakeLists.txt中看起来像这样:

IF(WIN32)
    ADD_LIBRARY(mymodule MODULE ${MY_LIBRARY_FILES})
    TARGET_LINK_LIBRARIES(mymodule libVendor)
    INSTALL(TARGETS mymodule LIBRARY)
ENDIF(WIN32)
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用调试设置在MSVC中编译此模块,则编译失败.所以我想要做的是将它排除在编译和安装在调试配置中.在发布配置中,它将正常使用.用CMake可以做到这一点吗?

c++ cmake visual-c++

4
推荐指数
2
解决办法
2839
查看次数