小编Ian*_*ott的帖子

最好的抽象包装带有异常的C错误处理的最佳方法

有用的C库不提供C ++绑定并不少见。从C ++调用C很容易,但是在其他问题中,C ++项目可能需要异常,而不是数字错误返回值。

是否有任何特殊的约定或技巧可转换为异常,而每个函数调用都不包含ifthrow

我写了这个解决方案,用于包装gphoto2调用。必须将模板化函数包装在宏中很尴尬(但是函数名称对于错误消息来说很重要;此处的逻辑类似于perror)。

有没有更好的技术,或者任何开源项目做得特别好?

#include <gphoto2/gphoto2.h>
#include <string>

class Gphoto2Error : public std::exception {
  private:
    std::string message;

  public:
    Gphoto2Error(std::string func, int err) {
        message = func + ": " + std::string(gp_result_as_string(err));
    }
    const char *what() const throw() {
        return message.c_str();
    }
};

template <typename F, typename... Args>
void _gpCall(const char *name, F f, Args... args) {
    int ret = f(args...);
    if (ret != GP_OK) {
        throw Gphoto2Error(name, ret);
    }
}
#define …
Run Code Online (Sandbox Code Playgroud)

c++ exception

11
推荐指数
1
解决办法
111
查看次数

为什么带有.chars()的.flat_map()不能与std :: io :: Lines一起使用,而是使用字符串向量?

我试图迭代stdin中的字符.该Read.chars()方法实现了这一目标,但不稳定.显而易见的替代方法是使用Read.lines()a flat_map将其转换为字符迭代器.

这似乎应该有效,但不会,导致borrowed value does not live long enough错误.

use std::io::BufRead;

fn main() {
    let stdin = std::io::stdin();
    let mut lines = stdin.lock().lines();
    let mut chars = lines.flat_map(|x| x.unwrap().chars());
}
Run Code Online (Sandbox Code Playgroud)

在Rust中的逐字符读取文件中提到,但它并没有真正解释原因.

我特别困惑的是它与文档中flat_map的示例有何不同,后者用于flat_map应用于.chars()字符串向量.我真的不明白这应该有什么不同.我看到的主要区别是我的代码也需要调用unwrap(),但是将最后一行更改为以下代码也不起作用:

let mut chars = lines.map(|x| x.unwrap());
let mut chars = chars.flat_map(|x| x.chars());
Run Code Online (Sandbox Code Playgroud)

它在第二行失败,所以问题似乎不是unwrap.

为什么最后一行不起作用,当文档中非常相似的行没有?有没有办法让这个工作?

iterator rust

6
推荐指数
1
解决办法
207
查看次数

从Magick ++图像中加载内存(libharu)中的图像

我正在研究基于libharu的 c ++中的一些pdf生成软件,我希望能够首先使用Magick ++操作图像,然后使用libharu函数从内存加载它们:

HPDF_LoadRawImageFromMem()
Run Code Online (Sandbox Code Playgroud)

根据文档,本质上从一些void *缓冲区加载图像.

我的目标是能够void*Magick::Image实例中获取此数据,并根据此数据将此图像加载到我的haru pdf中.

我曾尝试写过一个void*或一个Magick::Blob但是我迄今为止唯一的成就是一些黑色矩形而不是我期待的图像.

有没有人有将Raw图像数据从一个库转换为另一个库的经验?

我试图从内存中执行此操作的原因是因为到目前为止,我正在将Magick :: Image实例写入文件,然后从此文件中读取以加载到haru,这在我的应用程序的上下文中是一个巨大的性能影响.

c++ image imagemagick libharu magick++

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

标签 统计

c++ ×2

exception ×1

image ×1

imagemagick ×1

iterator ×1

libharu ×1

magick++ ×1

rust ×1