小编use*_*ser的帖子

如何跨模块文件使用宏?

我在同一个包中的两个模块中有两个模块,其中包已macro_rules启用.我想在另一个模块中使用一个模块中定义的宏.

// macros.rs
#[macro_export] // or not? is ineffectual for this, afaik
macro_rules! my_macro(...)

// something.rs
use macros;
// use macros::my_macro; <-- unresolved import (for obvious reasons)
my_macro!() // <-- how?
Run Code Online (Sandbox Code Playgroud)

我目前遇到编译器错误" macro undefined: 'my_macro'"...这是有道理的; 宏系统在模块系统之前运行.我该如何解决这个问题?

module rust rust-macros

59
推荐指数
5
解决办法
2万
查看次数

为什么不能满足这种更高的kinded life相关类型特征限制?

trait A<'self_>: 'self_ {
    type I;
}
trait AMut
    where
        Self: for<'self_> A<'self_>,    
        for<'self_> <Self as A<'self_>>::I: 'static
{
    fn mutate_self(&mut self);      
}

fn foo<X>(x: &mut X)
    where
        X: 'static + for<'a> A<'a> + AMut,
        for<'a> <X as A<'a>>::I: 'static
{
    x.mutate_self();
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

围栏链接

这出错了

<anon>:17:7: 17:20 error: the requirement `for<'self_> <X as A<'self_>>::I : 'static` is not satisfied [E0280]
<anon>:17     x.mutate_self();
                ^~~~~~~~~~~~~
error: aborting due to previous error
playpen: application terminated with error code 101
Run Code Online (Sandbox Code Playgroud)

我会认为第15行的界限会满足第7行的界限.我错过了什么?

rust

19
推荐指数
1
解决办法
608
查看次数

如何使用PIP编译带有调试信息的Python扩展

我有Python扩展的源代码.我想在调试时查看该扩展的调试符号.如何告诉PIP编译和链接我的扩展的调试符号?

(最好是平台不可知,否则Linux)

python-c-extension

12
推荐指数
1
解决办法
2815
查看次数

如何在Rust中的签名中使用Fn traits/closures

我想编写一个int-returning函数,它接受一个带零参数的闭包,一个带一个参数的闭包,一个带两个参数的闭包,其中所有闭包参数都是类型int,每个闭包返回f32.

这个函数的签名是什么样的?

现在我想接受通过FnFnMut特征.签名是什么样的?是否需要使用箱子中的功能?如果是这样,哪些是为什么?

如果知道:它看起来像糖?脱?

如果知道:未来可能会发生什么变化?

rust

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

我应该关心ASAN报告的Rust可执行文件中的单定义规则违规吗?

我有一个Rust可执行文件,它纯粹是在Rust生态系统中编译的; 没有外部C代码或链接库,没有编译器拖入的内容.

在Linux上使用ASAN编译后,ASAN会报告单定义规则(ODR)违规.我是否应该关注可执行文件的正确性?有哪些常见问题?有什么角落案例?

我的理解是因为我的所有Rust依赖项都被编译为.rlibs,并且因为我的代码都不是外语,并且因为我的代码都没有显式引用外部库,所以编译器应该已经知道我的所有程序符号编译时的名称,可能除了它本身拖拽的系统库,因此应该知道.因此,我倾向于忽视ODR违规,因为"我无能为力".

我目前无法生成这方面的最小重复示例,只需要一个足以确定我是否应该足够关心进行调查的答案.

我用来构建/运行ASAN的命令:

CARGO_INCREMENTAL=0 RUSTFLAGS="-Z sanitizer=address" cargo run --target x86_64-unknown-linux-gnu --example name_of_example
Run Code Online (Sandbox Code Playgroud)

错误消息(删除了可执行文件名和文件路径)

==18003==ERROR: AddressSanitizer: odr-violation (0x5625fb39f760):
  [1] size=0 'ref.c' executable_name_here12-d0d02bd82d5d1b2688ff68a1707ea7a1.rs
  [2] size=0 'ref.l' executable_name_here10-d0d02bd82d5d1b2688ff68a1707ea7a1.rs

These globals were registered at these points:
  [1]:
    #0 0x5625fb2a5727 in __asan_register_globals.part.11 /checkout/src/libcompiler_builtins/compiler-rt/lib/asan/asan_globals.cc:338
    #1 0x5625faf4e26d in asan.module_ctor (/executable/path/here+0x1c326d)

  [2]:
    #0 0x5625fb2a5727 in __asan_register_globals.part.11 /checkout/src/libcompiler_builtins/compiler-rt/lib/asan/asan_globals.cc:338
    #1 0x5625fae9d9cd in asan.module_ctor (/executable/path/here+0x1129cd)
Run Code Online (Sandbox Code Playgroud)

据我所知,这不是来自我的箱子(我没有观察到不良行为,因此我倾向于不关心)但我有多个相互依赖的箱子在这里得到检验,我不确定这是否能反映出来一些更险恶的潜在问题.

one-definition-rule rust

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

在CMake中QMake的CONFIG + =控制台

在QMake中:

CONFIG += console
Run Code Online (Sandbox Code Playgroud)

如何在CMake中获得相同的效果?

(规格:Qt 5.0.2,CMake 2.8.10)

qt cmake

8
推荐指数
1
解决办法
2586
查看次数

重载外部函数以在单独的模块中使用

我想要做(通过支持),但我打一个小问题(冲淡你的少,头痛,无不满).

假设我是一个图书馆作家,我在D文件中有这些功能:

module mod_a;
import std.stdio;
void run(T)(T v) { writeln("Jigglypuff!"); }
void runrun(T)(T v) { run(v); }
Run Code Online (Sandbox Code Playgroud)

我在另一个模块中有客户端代码,我试图在其中重载run并调用runrun:

import mod_a;
void run(T:double)(T v) { writeln("Wigglytuff!"); }
void main() { runrun(1.0); }
Run Code Online (Sandbox Code Playgroud)

这段代码导致'Jigglypuff!' 被打印而不是'Wigglytuff!',这是有道理的,因为定义runrun只能看到它模块中可用的未解决的非专业形式.然而,我(和客户代码)希望看到'Wigglytuff'而不是'Jigglypuff'.

在C++中,我会抛出namespace mod_a { ... }run的特化,以表明在尝试确定runrun调用的定义时,应该检查客户端代码的运行以及我的库代码,欢迎这些行为带来的蠕虫病毒.

是否有一种惯用的D方式来组织这种方式,以便run可能故意劫持该功能?具体来说,我想模仿C++的全局函数与ad-hoc特化的行为方式.

d

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

com.sun.jna和net.java.dev.jna之间的区别?

我正在查看中央maven存储库并查看a net.java.dev.jnacom.sun.jnagroupId for JNA.JNA的github,使用com.sun.jna路径作为源代码中的目录,表明4.1已作为注释的一部分被推入存储库,但我看到的net.java.dev.jna是4.1和com.sun.jna3.0.

显然,我想使用JNA,但感到困惑.这个套餐发生了什么事?

java jna maven-central

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

Qt信号转发;继承QAbstractProxyModel

文档似乎提到了这一点,而且我在 StackOverflow 和其他地方看到了一堆模棱两可的示例代码,所以......

如果我有一个A实现 a 的类QAbstractProxyModel和一个B实现 a 的类QAbstractItemModel,并且我调用A该方法的实例setSourceModel(b)(其中b是 的实例)B,那么它是否会自动处理转发更新信号modelReset,例如rowsInserted、 等?或者我必须手动连接所有这些?

c++ qt qt5

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

JNR使用指针参数进行回调/关闭

我正在使用JNR并尝试传递具有以下C等效签名的回调函数:

int fn(void const*, void const**, void**)
Run Code Online (Sandbox Code Playgroud)

进入一些C函数。我已将嵌套在Java方面的JNR库接口中的回调声明为:

public static interface Fn {
  @Delegate public int call(Pointer a, Pointer[] b, Pointer[] c);
}
Run Code Online (Sandbox Code Playgroud)

在JNR库界面中具有另一个功能

public int doSomething(Fn fn);
Run Code Online (Sandbox Code Playgroud)

用作doSomethingC代码接受中的包装int(*)(void const*, void const**, void**)。但是每当我创建一个回调时:

new Fn() { int call() { ... } };
Run Code Online (Sandbox Code Playgroud)

并将其传递给doSomething我的JNR库接口的方法,我得到运行时错误:

java.lang.ExceptionInInitializerError

    Caused by:
    java.lang.IllegalArgumentException: unsupported closure parameter type class [Ljnr.ffi.Pointer;
        at jnr.ffi.provider.jffi.NativeClosureProxy.newProxyFactory(NativeClosureProxy.java:109)
        at jnr.ffi.provider.jffi.NativeClosureFactory.newClosureFactory(NativeClosureFactory.java:84)
        at jnr.ffi.provider.jffi.NativeClosureManager.initClosureFactory(NativeClosureManager.java:71)
        at jnr.ffi.provider.jffi.NativeClosureManager.getClosureFactory(NativeClosureManager.java:49)
        at jnr.ffi.provider.jffi.NativeClosureManager.newClosureSite(NativeClosureManager.java:81)
        at jnr.ffi.provider.jffi.InvokerTypeMapper.getToNativeConverter(InvokerTypeMapper.java:68)
        at jnr.ffi.provider.jffi.InvokerTypeMapper.getToNativeType(InvokerTypeMapper.java:143)
        at jnr.ffi.mapper.CachingTypeMapper.lookupAndCacheToNativeType(CachingTypeMapper.java:71)
        at jnr.ffi.mapper.CachingTypeMapper.getToNativeType(CachingTypeMapper.java:43)
        at jnr.ffi.mapper.CompositeTypeMapper.getToNativeType(CompositeTypeMapper.java:34)
        at …
Run Code Online (Sandbox Code Playgroud)

c java jnr

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

标签 统计

rust ×4

java ×2

qt ×2

c ×1

c++ ×1

cmake ×1

d ×1

jna ×1

jnr ×1

maven-central ×1

module ×1

one-definition-rule ×1

python-c-extension ×1

qt5 ×1

rust-macros ×1