我对如何让这个工作感到有些困惑,我已经把它从真实的东西中剪下来了。我写了一个特征:
pub trait Renderable<F: Fn(&PropertyTags)> {
fn set_property_changed_callback(&mut self, callback: Option<F>);
}
Run Code Online (Sandbox Code Playgroud)
其中 'child' 参数add_child受限制并且PropertyTags只是一个枚举。我已经包含了类型的模拟实现child来演示我的用法:
pub struct Child<F: Fn(&PropertyTags)> {
property_changed_callback: Option<F>,
}
impl<F: Fn(&PropertyTags)> Renderable<F> for Child<F> {
fn set_property_changed_callback(&mut self, callback: Option<F>) {
self.property_changed_callback = callback;
}
}
Run Code Online (Sandbox Code Playgroud)
然后这些将用作:
pub fn add_child<REND, C>(&mut self, child: &mut REND)
where C: Fn(&PropertyTags),
REND: Renderable<C>
{
let tc = Some(|property_tag: &PropertyTags|{
});
child.set_property_changed_callback(tc);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
child.set_property_changed_callback(tc);
| ^^ expected type parameter, found closure
|
= …Run Code Online (Sandbox Code Playgroud) 我在使用使用$ NDK/build/tools/make-standalone-toolchain.sh脚本创建的独立NDK工具链构建适用于Android的Protocol Buffers时遇到问题.我遇到的问题是:
libtool: link: g++ -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -O2 -g -DNDEBUG -o protoc main.o ./.libs/libprotobuf.a ./.libs/libprotoc.a /home/sizeak/AudioFingerprinting/ProtoBuf/jni/src/.libs/libprotobuf.a -lz -lc
./.libs/libprotoc.a(plugin.pb.o): In function `GoogleOnceInit':
/home/sizeak/AudioFingerprinting/ProtoBuf/jni/src/./google/protobuf/stubs/once.h:115: undefined reference to `pthread_once'
Run Code Online (Sandbox Code Playgroud)
这似乎意味着缺少pthreads库,但是sysroot是由ndk脚本创建的,所以应该包含所有内容,对吧?我在某处读到,在使用独立工具链时没有必要显式链接pthreads.我使用的configure命令是:
./configure --host=arm-eabi --with-sysroot=$SYSROOT CC=$CC --enable-cross-compile --with-protoc=protoc LIBS="-lc"
Run Code Online (Sandbox Code Playgroud)
将环境变量设置为指向脚本创建的sysroot的位置.
我在网上的很多页面上看到过这个问题,但似乎没有人发布答案.有人可以帮忙吗?