我是Generics的新手,我遇到了一个问题.
请考虑以下代码:
public class A {}
public class B extends A {}
public <T extends A> T getB()
{
A test = new B();
Class<B> clazz = B.class;
if (clazz.isInstance(test))
{
return (T)test;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个未经检查的强制转换警告.就return (T)test;行了.但显然我正在用if (clazz.isInstance(test))线条检查类型.
有没有办法进行"检查演员表"?
我不打算只是压制警告但实际上是实施了一次检查.不幸的是,我无法找到有关如何执行检查演员表的信息.
我正在使用yocto雏菊生成一个新的BSP.当我构建我的图像时,我收到以下警告:
NOTE: Resolving any missing task queue dependencies
NOTE: multiple providers are available for virtual/kernel (my-kernel, linux-dummy)
NOTE: consider defining a PREFERRED_PROVIDER entry to match virtual/kernel
NOTE: multiple providers are available for runtime kernel-modules (my-kernel, linux-dummy)
NOTE: consider defining a PREFERRED_PROVIDER entry to match kernel-modules
Run Code Online (Sandbox Code Playgroud)
我无法理解如何为内核定义我的首选提供程序.根据我的阅读,我应该只需要将它添加到meta-myLayer/conf/machine/myMachine.conf我做了,如下:
KERNEL_IMAGETYPE = "zImage"
KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/myTree.dtb"
KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
# use this kernel and version
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
PREFERRED_VERSION_linux-yocto = "3.14%"
Run Code Online (Sandbox Code Playgroud)
Yocto/bitbake似乎忽略了这些线条.
另外,要清楚我还在build/conf/local.conf中正确设置了机器名
还有什么我需要改变才能让它发挥作用吗?或者是Yocto那个坏了吗?
我正在尝试使用 condition_variable_any::timed_wait()
当我将 a 传递给boost::chrono::millisecond函数时,它无法编译:
error: no match for ‘operator+’ in ‘boost::get_system_time() + wait_duration’
Run Code Online (Sandbox Code Playgroud)
但是,如果我传入boost::posix_time::milliseconds该函数,它确实会编译。
问题是我不明白两者之间的区别。他们都声称是持续时间。但据我所知,posix time 代表自纪元以来的时间,对我而言,这意味着boost::posix_time::milliseconds p(1000)代表纪元后 1 秒的时间。我不认为这是一个持续时间。
我错过了什么?有人可以解释这些差异吗?