草庐IT

包装类

全部标签

swift - 将巨大的 C++ 库自动包装到 C 以在 Swift/Go 中导入

假设我有一个巨大的C++库(有大量依赖项,在GCC下完整构建需要大约3小时)。我想在该库的基础上进行构建,但不想在C++中这样做,而是使用更高效的语言。我如何才能真正桥接或包装那个externlib包,以便我可以用另一种语言访问它并在它之上编程?考虑的语言:swift去我发现,这两种语言都为C库和代码提供了自动桥接或包装(我实际上不知道包装/桥接之间有什么区别)。所以,如果我有一些c代码,我可以将它放在同一个Swift或Go项目中,并可以在我的项目中通过简单的导入来使用它。这在两种语言中都不适用于C++代码。所以我用谷歌搜索了如何将C++库转换为C代码或生成自动包装器。我发现了以下内容

go - 如何使用 "...interface{}"参数包装函数(如 Printf)

在我当前的项目中,我正在尝试编写一个有条件地调用fmt.Println的日志记录函数。我当前的Log函数如下所示:funcLog(levelint,a...interface{}){iflevel但是当我这样调用它时,由于某种原因,Log的输出被括在括号中:http://play.golang.org/p/Aa8vC54Ih0packagemainimport"fmt"varLogLevelintfuncmain(){fmt.Println("string",10,3.1415926)LogLevel=1Log(1,"string",10,3.1415926)}funcLog(leve

go - 包装声明的目的是什么?

每个Go文件都以package开头.据我所知——这可能是我遗漏了一些信息的地方——只有两个可能的值:所在目录的名称*,或main.如果是main,该目录中的所有其他文件只能有main,也。如果是其他原因,则项目不一致/违反约定。现在如果是目录名,那就是多余的了,因为同样的信息,嗯,在目录名中。如果是main,有点没用,因为据我所知,没有办法告诉gobuild到“请构建所有main包”。*因为,换句话说,一个目录就是一个包。 最佳答案 包名不必与目录名一致。packagefoobar可以在目录xyz/go-foobar中。在这种情况下

c - 如何在 Linux 上重新实现(或包装)系统调用函数?

假设我想完全接管open()系统调用,也许是为了包装实际的系统调用并执行一些日志记录。OnewaytodothisistouseLD_PRELOAD加载接管open()入口点的(用户制作的)共享对象库。用户创建的open()例程然后通过dlsym()获取指向glibc函数open()的指针,并调用它。然而,上面提出的解决方案是一个动态解决方案。假设我想静态链接我自己的open()包装器。我该怎么做?我猜机制是一样的,但我也猜想用户定义的open()和libcopen()之间会有符号冲突。请分享任何其他实现相同目标的技术。 最佳答案

java - 通过设置最大宽度使 JLabel 包装它的文本

我有一个JLabel,上面有很多文字。有没有办法让JLabel有一个最大宽度,以便它将文本换行以使其不超过这个宽度?谢谢 最佳答案 没有。你可以在标签中使用HTML,但是你必须硬编码break标签。更好的方法是使用JTextArea并打开换行。您可以更改文本的背景、前景、字体等,使其看起来像一个标签。注意,这个答案至少在Java7中已经过时了。根据@darren的回答,您只需用包装字符串和标签:myLabel.setText(""+myString+"");您不需要对任何中断标记进行硬编码。文本在组件调整大小时换行。

java - 何时使用包装类和原始类型

我什么时候应该使用原始类型的包装类?或者在什么情况下我应该在包装器/原始类型之间进行选择? 最佳答案 其他人提到,某些构造(例如Collections)需要对象,并且对象比其原始对应物(内存和装箱)具有更多开销。另一个考虑因素是:将对象初始化为null或将null参数发送到方法/构造函数以指示状态或功能会很方便。原语无法做到这一点。许多程序员将数字初始化为0(默认)或-1来表示这一点,但根据具体情况,这可能是不正确的或具有误导性的。当某些东西使用不正确时,这也会为NullPointerException设置场景,这比一些任意错误更适

java - 用Scala中的Option包装Java中的空返回方法?

假设我有一个方法session.get(str:String):String但你不知道它会返回一个字符串还是null,因为它来自Java。在Scala中是否有更简单的方法来处理此问题,而不是session.get("foo")==null?也许像ToOption(session.get("foo"))这样应用一些魔法,然后我可以像一样以Scala方式处理它ToOption(session.get("foo"))match{caseSome(_)=>;caseNone=>;} 最佳答案 Option伴随对象的apply方法用作可空引用

java - Maven中的 "pom"包装是什么?

我得到了一个maven项目来编译并部署到一个tomcat服务器上。今天之前我从未使用过maven,但我一直在谷歌上搜索。该项目中的顶级pom.xml文件似乎将打包类型设置为pom。在mvninstall之后我应该做什么来部署这个应用程序?我希望能够在某处或某处找到war文件,但我想我找错了地方或错过了一步。 最佳答案 pom基本上是一个子模块的容器,每个子模块由与pom.xml同目录的子目录表示,并带有pom包装.在某个地方,嵌套在项目结构中,您会发现带有war包装的Artifact(模块)。Maven通常将所有内容构建到每个模块的

c++ - 为面向对象的 C++ 代码开发 C 包装 API

我正在寻求开发一组CAPI,它们将围绕我们现有的C++API来访问我们的核心逻辑(用面向对象的C++编写)。这本质上是一个胶水API,允许我们的C++逻辑可以被其他语言使用。有哪些好的教程、书籍或最佳实践介绍了将C封装到面向对象的C++中所涉及的概念? 最佳答案 这并不难手工完成,但取决于界面的大小。我所做的案例是在纯C代码中启用我们的C++库,因此SWIG并没有太大帮助。(好吧,也许SWIG可以用来做这件事,但我不是SWIG大师,这似乎不平凡)我们最终做的是:每个对象都在C中传递一个不透明的句柄。构造函数和析构函数封装在纯函数中成

c++ - 您使用哪些 C++ 标准库包装函数?

Thisquestion,今天早上被问到,让我想知道您认为C++标准库中缺少哪些功能,以及您是如何使用包装函数填补空白的。例如,我自己的实用程序库有这个vector追加功能:templatestd::vector&operator+=(std::vector&v1,conststd::vector&v2){v1.insert(v1.end(),v2.begin(),v2.end());returnv1;}这个用于清除(或多或少)任何类型-对于std::stack之类的东西特别有用:templatevoidClear(C&c){c=C();}我还有一些,但我对您使用的那些感兴趣?请限制对