我有一个C#库,我想用一个包装器dll进行分发,它提供了比类本身更多的功能.
我希望能够从类库中创建一个对象,并在另一个项目中将它与包装器dll一起使用,如下所示:
class Program
{
static void Main(string[] args)
{
var wrapper = new Wrapper(); // my wrapper dll class
var classLib = new ClassLib(1, "test", ..); // create class from my library
wrapper.Send(classlib); // method in my wrapper
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在项目中包含我的包装器DLL和类库dll,我可以这样做.但是,我希望能够有1个可分发的dll来实现这一目标.有没有办法在不包含在包装器中重新定义类库类的情况下执行上述操作?
希望这有点清楚.谢谢你的建议.
有了Django模型,我想实现这个目标:
class Foo(models.Model):
name = models.CharField(max_length=50)
#wrapping the save function, including extra tasks
def save(self, *args, **kwargs):
super(Foo, self).save(*args, **kwargs)
if extra_param:
...do task 1
else:
...do task 2
Run Code Online (Sandbox Code Playgroud)
虽然装箱Foo我想通过如此
Foo(name="Bill Gates",extra_param=True).save() # now triggers the task 1
Foo(name="Bill Gates").save() # now triggers the task 2
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?我也对任何其他建议开放:)
谢谢
一个人问了一个关于如何使用替代的相等函数在python中获取列表唯一函数的问题.
我认为可以通过继承元素类并重载相等函数来完成
import functools
@functools.total_ordering
class ffloat(float):
def __eq__(self,other):
if floor(self) == floor(other):
return True
else:
return False
def __le__(self,other):
if self == other:
return True
else:
return float(self) <= float(other)
def __hash__(self):
return floor(self)
a = map(ffloat,[4.3,8,8.9, 13])
In [41]: a[1] == a[2]
Out[41]: True
Run Code Online (Sandbox Code Playgroud)
但
In [42]: set(a)
Out[42]: set([4.3, 8.0, 8.9, 13.0])
Run Code Online (Sandbox Code Playgroud)
编辑:用平面相等替换abs <1.5相等
添加Hash PS有一种方法可以使一个类和两个lambda创建一个类工厂,并返回一个继承第一个类的类,覆盖所需的相等函数.
我有一个Long变量说,
private Long m_prevPacketRecvdTime = null;
Run Code Online (Sandbox Code Playgroud)
现在我有一个setter/getter对,
public void setM_prevPacketRecvdTime() {
if (this.m_prevPacketRecvdTime == null) {
this.m_prevPacketRecvdTime = new Long(System.currentTimeMillis());
} else {
// Why to create a new Object every time
//Why I can't just set the new value
//Why use new operator here instead of an Assignment or set method call
}
}
Run Code Online (Sandbox Code Playgroud)
而不是传统的setter方法,我想改进它,通过1.传递long而不是Long,2.只创建一个新的Long,剩下的时间只是将新值设置为现有的Long对象.但令我难以置信的是,Long没有这样的方法.
我们是否真的需要在每次想要更改其值时创建一个新的Long对象,我们如何为现有的Long对象设置一个新的long值(与longvalue()相反)?
更多信息 在寻找答案的同时,我也遇到了具有类似功能的AtomicLong,但我不确定这对我是否有用.因为他们清楚地说AtomicLong" 不能用作Long的替代品 ".
当我将原始类型int放入java中的ArrayList时,为什么原始类型int会自动更改为对象Integer?
如果我写下面的代码(在java中):
Integer a =new Integer(5);
Integer b=new Integer(5);
if(a==b){
System.out.println("In ==");
}
if(a.equals(b)){
System.out.println("In equals");
}
Run Code Online (Sandbox Code Playgroud)
我的输出是:“等于”,但是如果我将第一行和第二行更改为->
Integer a =5;
Integer b=5;
Run Code Online (Sandbox Code Playgroud)
那么我的输出是:
In ==
In equals
Run Code Online (Sandbox Code Playgroud)
那么创建Integer对象有什么区别?当我们这样做时如何创建它Integer a =5?
如果我创建Integer a=5并创建另一个对象,是否意味着a和b对象引用相同的对象Integer b=5?
我有这两个div!
<div id="loader">
</div>
Run Code Online (Sandbox Code Playgroud)
和
<div id="wrapper">
</div>
Run Code Online (Sandbox Code Playgroud)
"包装器div不在装载器div内部进行任何澄清"
我的剧本
$(window).bind("load",function() {
$('#loader').css('display',none);
$('#wrapper').css('visibility',visible);
});
Run Code Online (Sandbox Code Playgroud)
我打算用脚本做的是在页面完全加载后隐藏加载器div并显示包含页面所有内容的包装器div.我最初设置display:none了包装样式.
正如我所料,显示加载器div但是在加载完成后(我至少可以从鼠标的加载图标和favicon浏览器选项卡的区域中看出)但是包装器div没有显示.
你能帮忙的话,我会很高兴.
我正在编写一个与POCO C++库动态链接的C++库.我广泛使用POCO来做几件事,比如套接字,文件处理,日志记录等.所以,我需要处理POCO可以抛出的异常.
除了与POCO相关的异常之外,我的代码可以抛出其他异常,原因有几个(基本上是RunTime异常).POCO C++实际上包含一个RunTimeException类.所以,我可以使用它.
我的问题是:我是否应该依赖POCO异常,并允许使用我的库的第三方直接捕获它们?另一种选择是创建我自己的异常集,包装POCO异常,并公开它们.这样,如果我决定将来摆脱POCO,我不需要改变那部分.只是我的包装异常.
还有其他没有明显的理由用我自己的POCO例外包装所有的POCO例外吗?
提前谢谢了.
我正在尝试编写一个脚本来自动化python中的设备.该设备是用C编程的,我现在正在尝试编写一个C包装器,以便我稍后从Python调用这些函数.我正在学习本教程.
原始C函数隐藏在.lib文件中,但提供了包含所有函数初始化的头文件.这是一个它看起来像什么的片段
#ifdef VNX_ATTEN_EXPORTS
#define VNX_ATTEN_API __declspec(dllexport)
#else
#define VNX_ATTEN_API __declspec(dllimport)
#endif
VNX_ATTEN_API void fnLDA_SetTestMode(bool testmode);
VNX_ATTEN_API int fnLDA_GetNumDevices();
VNX_ATTEN_API int fnLDA_GetDevInfo(DEVID *ActiveDevices);
VNX_ATTEN_API int fnLDA_GetModelName(DEVID deviceID, char *ModelName);
VNX_ATTEN_API int fnLDA_InitDevice(DEVID deviceID);
VNX_ATTEN_API int fnLDA_CloseDevice(DEVID deviceID);
VNX_ATTEN_API int fnLDA_GetSerialNumber(DEVID deviceID);
VNX_ATTEN_API int fnLDA_GetDeviceStatus(DEVID deviceID);
Run Code Online (Sandbox Code Playgroud)
这是我试图创建的C包装器
#include <stdio.h>
#include <Python.h>
extern "C" {
#include "VNX_atten.h"
}
//#include <stdafx.h>
/*
* Function to be called from Python
*/
extern "C" {
static PyObject* py_fnLDA_SetTestMode(PyObject* self, PyObject* args)
{
double …Run Code Online (Sandbox Code Playgroud) 为什么这段代码不起作用?有两个向量.基矢量元素应该将派生的矢量元素称为参考(而不是副本).输出是随机数,因此,由于某种原因,reference_wrapper元素没有正确引用派生元素.
#include <iostream>
#include <vector>
struct Base
{
Base (int a) : a_ (a) {}
int a_;
};
struct DerivedA : Base
{
DerivedA (int a) : Base (a) {}
};
int main(int argc, const char * argv[]) {
std::vector <std::reference_wrapper <Base>> b;
std::vector <DerivedA> d;
const int num = 100;
for (int i = 0; i < num; i++)
{
d.push_back (i);
b.push_back (d.back());
}
for (int i = 0; i < num; i++)
std::cout << b[i].get().a_;
return 0; …Run Code Online (Sandbox Code Playgroud)