小编Exp*_*ent的帖子

包装用于C消耗的C++类API

我有一组相关的C++类,必须以这样的方式包装和导出DLL,以便C/FFI库可以轻松使用它们.我正在寻找一些"最佳实践"来做这件事.例如,如何创建和释放对象,如何处理基类,替代解决方案等...

到目前为止,我的一些基本指导原则是将方法转换为简单函数,并使用额外的void*参数表示'this'指针,包括任何析构函数.构造函数可以保留其原始参数列表,但必须返回表示该对象的指针.所有内存都应该通过同一组进程范围的分配和自由例程来处理,并且在某种意义上应该可以通过宏或其他方式进行热交换.

c c++ api class word-wrap

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

Java autoboxing和三元运算符疯狂

只花了几个小时调试这段代码:

    LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
    Integer boxedPci = 52;
    Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;
Run Code Online (Sandbox Code Playgroud)

以上产生了NullPointerException.以下代码不:

    LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
    Integer boxedPci = 52;
    Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : Integer.valueOf(-1);
Run Code Online (Sandbox Code Playgroud)

唯一的区别是用Integer.valueOf()包装-1.一旦有人解释了为什么这个代码的行为方式,我肯定我会打破我的前额..但有人可以向我解释为什么这个代码的行为方式:)

- 编辑

第二个想法,我怀疑NPE来自rsrqs.get()返回null,我认为java在尝试解包成int之前,然后再回到整数.Integer.valueOf()强制Java执行unbox-box步骤.故事的道德启示; 不要只忽略Eclipse中的那些拳击警告;)

java autoboxing ternary operator-keyword

19
推荐指数
2
解决办法
2292
查看次数

获取块参数的数量

我需要获取给定块所需的参数数量.例如:

foobar(1,2,3) { |a, b, c|
}

def foobar(x, y, z, &block)
  # need to obtain number of arguments in block
  # which would be 3 in this example
end
Run Code Online (Sandbox Code Playgroud)

这可以在1.9主干中使用,但不能在任何正式版本中使用.我希望有没有办法做到这一点,而无需下载单独的gem /扩展模块.

ruby methods

10
推荐指数
2
解决办法
3791
查看次数

Xtext自定义交叉引用

我一直在为我们内部使用的语言开发一个基于Xtext的Eclipse插件.该语言可能包含以下形式的声明:

run : /some/file/path/foo.txt
Run Code Online (Sandbox Code Playgroud)

...最终我想提供一个自定义的位置提供程序,以便在文件路径上按F3将在Eclipse的新编辑器中打开该文件.我还没有机会尝试这个,但有没有人看到以下方法有什么问题?

  1. 重写IHyperlinkHelper以使我的文件路径规则可以交叉引用
  2. 重写ILocationInFileProvider以使文件路径规则执行Eclipse魔术以在新编辑器中打开文件

任何建议表示赞赏,谢谢

xtext

7
推荐指数
1
解决办法
1016
查看次数

标签 统计

api ×1

autoboxing ×1

c ×1

c++ ×1

class ×1

java ×1

methods ×1

operator-keyword ×1

ruby ×1

ternary ×1

word-wrap ×1

xtext ×1