我找到了一篇旧帖子,但没有说明我对Wrapper Classes使用的设计模式的理解,而且,从维基百科阅读时我没有得到任何明确的信息.
包装类是否真的使用任何设计模式?
如果使用模式,那么其模式是它的这些:Decorator Pattern,Facade Pattern或Adapter Pattern?
由于不同的原因,无法使用JNI直接在Java中调用C#方法.首先,我们必须使用C++为C#编写一个包装器,然后创建dll并通过Java中的JNI使用它.
我在C++中调用C#代码时遇到问题.我正在将C#.netmodule文件添加到C++项目中.代码粘贴在下面.如果我做错了,请指导我.
这是我的托管C++类UsbSerialNum.h:
#using <mscorlib.dll>
#include <iostream>
#using "UsbSerialNumberCSharp.netmodule"
using namespace std;
using namespace System;
public __gc class UsbSerialNum
{
public:
UsbSerialNumberCSharp::UsbSerialNumberCSharp __gc *t;
UsbSerialNum() {
cout<<"Hello from C++";
t = new UsbSerialNumberCSharp::UsbSerialNumberCSharp();
}
void CallUsbSerialNumberCSharpHello() {
t->hello();
}
};
Run Code Online (Sandbox Code Playgroud)
UsbSerialNumberCSharp.cs我创建.netmodule文件的C#文件:
using System.Collections.Generic;
using System.Text;
namespace UsbSerialNumberCSharp
{
public class UsbSerialNumberCSharp
{
public UsbSerialNumberCSharp(){
Console.WriteLine("hello");
}
public static void hello()
{
Console.WriteLine("hello");
}
public void helloCSharp ()
{
Console.WriteLine("helloCSharp");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我创建的主 …
我正在使用buildroot为嵌入式系统准备图像.我想导出buildroots内部交叉编译器,以便其他人可以使用相同的版本,命令检查GCC版本后:arm-linux-gcc -v我看到配置COLLECT_LTO_WRAPPER为我的硬盘上的静态位置
COLLECT_LTO_WRAPPER=/home/user/arm/buildroot/output/host/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.7.1/lto-wrapper
Run Code Online (Sandbox Code Playgroud)
它在另一个系统上是不正确的.
我只能发现LTO意味着链路时间优化.你能解释一下lto包装用什么时候需要什么?
用例:客户端想要构建一个由Angular 2组件组成的库,但向该库的最终用户(开发人员)公开抽象的,与技术无关的接口,以便这些用户可能使用纯JavaScript并且不知道图书馆的内部.
困难来自以下方面:
<mg-input>,它应该显示在普通JavaScript页面的标题中,但不仅仅是在那里 - 也在页面下方的表单中.两个不同的地方,两个不同的DOM节点,它们之间有普通的html.问题:我们如何在特定DOM节点上引导组件,以及如何将配置(不是基元而是复杂对象)传递给这些组件?
在React世界上,这是通过简单地运行完成ReactDom.render(domEl, <CustomInput nonPrimitiveConfig={config}/>),并取决于什么domElи config时,该组件将在不同的地方有不同的配置呈现.
如何在Angular 2中做到这一点?
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div style="background-color:#f09;">
<textarea></textarea>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Chrome中的结果:
删除了死的ImageShack链接
结果为FF:
删除了死的ImageShack链接
我正在为最新版本的FFTW寻找一个最小的Java包装器.在FFTW网站上列出的包装器要么过时(jfftw-1.2.zip),要么包含太多额外的东西(Shared Scientific Toolbox).谷歌搜索建议JFFTW3看起来很有前景,但下载链接已经破了(有人有镜子吗?)
对于那些想要纯Java FFT库的人来说,JTransforms看起来非常好.我更喜欢使用FFTW,因为它大约快两倍,它处理任意尺寸d> 3.
我必须使用一个库来进行非线程安全的数据库调用.另外,我偶尔也需要在后台线程中加载大量数据.
很难说哪些库函数实际访问了数据库,因此我认为对我来说最安全的方法是用锁来保护每个库调用.
假设我有一个库对象:
dbLib::SomeObject someObject;
Run Code Online (Sandbox Code Playgroud)
现在我可以这样做:
dbLib::ErrorCode errorCode = 0;
std::list<dbLib::Item> items;
{
DbLock dbLock;
errorCode = someObject.someFunction(&items);
} // dbLock goes out of scope
Run Code Online (Sandbox Code Playgroud)
我想将其简化为类似的东西(甚至更简单):
dbLib::ErrorCode errorCode =
protectedCall(someObject, &dbLib::SomeObject::someFunction(&items));
Run Code Online (Sandbox Code Playgroud)
这样做的主要优点是我不必复制接口,dbLib::SomeObject以便用锁来保护每个呼叫.
我很确定这是一个常见的模式/习语,但我不知道它的名字或搜索的关键词.(看看http://www.vincehuston.org/dp/gof_intents.html我认为,它更像是一种成语而不是一种模式).
我在哪里可以查找更多信息?
我最近开发了一个以DocumentWrapperPython中的一些ORM文档对象命名的类,以透明地向其添加一些功能,而无需以任何方式更改其接口.
我只有一个问题.假设我有一些User包裹在其中的对象.调用isinstance(some_var, User)将返回,False因为some_var确实是一个实例DocumentWrapper.
有没有办法伪造Python中的对象类型以获得相同的调用返回True?
包装类的缺点很少.需要注意的是,包装类不适合在回调框架中使用,其中对象将自引用传递给其他对象以进行后续调用("回调").因为包装对象不知道它的包装器,它会传递对它自己的引用(this),并且回调会逃避包装器.
有人可以用一个例子来解释这意味着什么.它是用Effective Java编写的,但我并没有完全理解它.
要添加到上下文,而不是继承,我们应该支持组合,而不是导致子类,Set我们应该使用这样的东西:
public class ForwardingSet<E> implements Set<E> {
private final Set<E> s;
public ForwardingSet(Set<E> s) { this.s = s; }
public void clear() { s.clear(); }
public boolean contains(Object o) { return s.contains(o); }
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这将如何失败,我仍然无法理解回调.在JavaScript中,我们可以使用函数回调,但如果有人可以解释,相同的概念如何应用于Java.
我有一个包含C库包装的Cython包.这是包的树结构
package/
_api.pxd
_wrap.pyx
setup.py
wrapper/
__init__.py
wrap.py
Run Code Online (Sandbox Code Playgroud)
干
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
将_wrap.so文件放在顶级package/目录中,这在大多数情况下通常是必需的.但是,我wrap.py需要_wrap.so在package/wrapper/目录中.我想知道是否有一种方法setup.py可以.so在所需的位置创建文件,而无需手动复制并粘贴到该位置.