小编Kay*_*Ess的帖子

Linux上来自共享对象的异常(.so)

我有一个名为ftest的测试程序.它加载包含测试的.so文件并运行它在那里找到的测试.其中一个测试加载并运行.so,其中包含用于O/RM的Postgres数据库驱动程序.

当Postgres驱动程序抛出一个在该.so文件中定义的异常(或者它链接到的那个,但是ftest没有链接到它)并被测试框架捕获时,异常析构函数会触发段错误.

只要编译的异常位于动态加载的.so中(使用dload),就会发生此段错误.

这种东西在具有相同架构的Windows中运行良好.我们并不想限制自己只使用来自核心库的异常 - 加载项应该可以自由创建自己的异常类并让它们正常处理.

例外是std :: exception的子类.有时可以在库中定义异常(例如libpqxx),这意味着异常有时也不受我们的控制.

使用以下内容抛出异常:

throw exception_class( exception_arguments );
Run Code Online (Sandbox Code Playgroud)

并使用:

catch ( std::exception &e ) {
    // handler code
}
Run Code Online (Sandbox Code Playgroud)

是否需要一些特殊的编译器选项才能使其正常工作?我们是否需要切换到通过throw new exception_class( args )(我们真的不想这样做)抛出异常?

c++ linux g++ exception shared-objects

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

Objective-C++预编译头文件

我正在使用一个C++库(它恰好在iPad应用程序中,但我不确定它应该有什么区别)并且真的希望预编译头以加速构建,但xCode似乎通过C编译器而不是C++编译器运行预编译的头文件.

有没有办法让它使用正确的编译器?我已经将所有源文件从.m更改为.mm.

c++ macos xcode objective-c objective-c++

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

如何确定 C++ lambda 的结果类型(闭包类型)

我正在尝试编写一个适用于 astd::function或 lambda的模板函数。让我们假设一个apply模板是这样的:

template<typename F>
typename F::result_type apply(const F &f) {
    return f();
}
Run Code Online (Sandbox Code Playgroud)

std::function<int()>例如,如果我使用 a 调用它,这很好,但如果 a 调用它,[]() -> int { return 1; }则不行,因为 lambda 的闭包类型没有result_type成员。那么如何编写apply的返回类型以使其正常工作?

我目前正在使用 clang 3.5 和 C++14,但无论我得到什么,如果它是可移植的,那就最好了——如果有帮助,我很乐意切换到更新的编译器。

实际的例子有点复杂。我正在尝试编写类似的东西reduce,如果第一个参数是可调用的,则将参数应用于可调用对象,否则它将忽略参数并返回作为第一个参数传递的值。

reduce(0, 1, 2); // returns 0
reduce([](int a, int b) { return a+b; }, 2, 3); // return 5
Run Code Online (Sandbox Code Playgroud)

c++ lambda functional-programming c++14

3
推荐指数
1
解决办法
1214
查看次数

在发布版本中,Boost.Thread线程无法在iPhone/iPad上启动

我们正在编写一个具有大量后台处理功能的iPad应用程序,所有这些都是用一组C++库编写的.这些库在Linux,Mac和Windows上运行良好,但在iPad上它们只能在调试版本中运行.

在发布版本中,看起来当第一个子线程正在被旋转时,它或者从未实际启动,或者它在处理过程中得不到足以允许主线程继续运行(它不是很明显调试器,如果线程实际上是否正在启动,则由于在发布版本中使用断点的正常问题).

查看调试器中的主线程boost::thread::start_thread(实际上boost::detail::yield位于其中boost::detail::spin_lock::lock).

CPU不是100%,因此旋转锁似乎不会创建新线程.

我们尝试了Boost 1.42和Boost 1.44,它们的行为方式相同.iOS 3.2和4.2都失败了发布版本.

我们可能做错了什么,或者这是一个已知的不工作配置?

iphone multithreading boost boost-thread ipad

2
推荐指数
1
解决办法
704
查看次数