如果我有这样的结构:
typedef struct
{
unsigned char c1;
unsigned char c2;
} myStruct;
Run Code Online (Sandbox Code Playgroud)
将此结构初始化为0的最简单方法是什么?以下是否足够?
myStruct _m1 = {0};
Run Code Online (Sandbox Code Playgroud)
或者我需要将每个成员显式初始化为0吗?
myStruct _m2 = {0,0};
Run Code Online (Sandbox Code Playgroud) 我需要实现一个hashable dict,所以我可以使用字典作为另一个字典的键.
几个月前我使用了这个实现:Python hashable dicts
但是我收到一位同事的通知说"这不是真的不可变,因此不安全.你可以使用它,但它确实让我感觉像一个悲伤的熊猫'.
所以我开始四处寻找创造一个不可变的东西.我没有必要将'key-dict'与另一个'key-dict'进行比较.它唯一的用途是作为另一个字典的关键.
我想出了以下内容:
class HashableDict(dict):
"""Hashable dict that can be used as a key in other dictionaries"""
def __new__(self, *args, **kwargs):
# create a new local dict, that will be used by the HashableDictBase closure class
immutableDict = dict(*args, **kwargs)
class HashableDictBase(object):
"""Hashable dict that can be used as a key in other dictionaries. This is now immutable"""
def __key(self):
"""Return a tuple of the current keys"""
return tuple((k, immutableDict[k]) for k in sorted(immutableDict)) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个大型应用程序,它包含许多较小的插件/应用程序.
它们不够大,不足以成为一个完整的进程,但是在一个进程中,它太小而无法在一个线程中运行,而我希望它基于一个插件基础.如果该插件的较新版本可用,则应该卸载,更新并重新启动.
在我寻找解决方案期间,我可以使用魔术字AppDomain,我引用:
"使用应用程序域来隔离可能导致进程失效的任务.如果正在执行任务的AppDomain状态变得不稳定,则可以卸载AppDomain而不会影响进程.当进程必须长时间运行而不重新启动时,这很重要您还可以使用应用程序域来隔离不应共享数据的任务."
因此,这正是我想要的.但是,我猜他们的"状态变得不稳定"与我的观点不同.我正在考虑一个问题,其中一个插件抛出异常,无论出于何种原因.我想抓住,通过电子邮件发送,卸载并重启(如果可能的话).
所以我创建了一个启动的应用程序,查找其文件夹中的所有.dll文件.检查dll是否包含插件.为该插件创建一个新的AppDomain,一旦加载了所有内容,它将启动每个插件.(每个插件可以由多个线程组成,与其他插件紧密共存).
所以我还在那里添加了一个超时,在5秒之后触发抛出一个新的Exception(); 在AppDomain上添加了UnhandledException事件来处理它.但是,它抓住了它,并且在导航之后,仍然"崩溃"了整个过程,包括所有额外的孩子 - AppDomains.
但它在报价中明确指出"隔离"可能"打倒流程"的任务.我错过了一些重要的东西吗?我对报价的看法是错误的吗?
对于需要一定程度调试的C应用程序中的大量函数调用,我想添加一个宏来简化我必须要做的输入.
现在我正在调用这样的函数:
aDebugFunction(&ptrToFunction, __LINE__, "ptrToFunction", param1, param2, etc)
Run Code Online (Sandbox Code Playgroud)
所以我想让我们编写一个为我做前3个参数的宏,如下所示:
#define SOMEDEFINE(x) &x, __LINE__, "x"
Run Code Online (Sandbox Code Playgroud)
但是,正如你们大多数人会立刻知道的那样,这不会起作用,它不会用给定x的名称替换"x",而只是将"x"作为第三个参数传递.
我对这个预处理器宏发生的事情的了解是非常有限的,因此我的谷歌搜索能力也是无用的,因为不知道在哪里搜索确切.
我希望你们其中一个人/女孩能给我一个解决方案,或指出我正确的方向.
说我有一节课A,B而且C.
Class A和class B都是mixin类C.
class A( object ):
pass
class B( object ):
pass
class C( object, A, B ):
pass
Run Code Online (Sandbox Code Playgroud)
这在实例化类C时不起作用.我将不得不object从类C中删除它以使其工作.(否则你会得到MRO问题).
TypeError:调用元类库时出错
无法
为基础B,对象,A 创建一致的方法解析顺序(MRO)
但是,我的情况有点复杂.在我的案例类C是服务器在那里A和B将是在启动时加载的插件.它们驻留在自己的文件夹中.
我也有一个名为的类Cfactory.在Cfactory中,我有一个__new__方法可以创建一个功能齐全的对象C.在__new__方法中我搜索插件,使用它们加载它们__import__,然后将它们分配给C.__bases__ += (loadedClassTypeGoesHere, )
所以以下是一种可能性:(使其相当抽象)
class A( object ):
def __init__( self ): pass
def printA( self ): print "A"
class B( …Run Code Online (Sandbox Code Playgroud) 如果sizeof (struct Astruct)不均衡,是否有任何可能的方法使编译器挽救?
背景信息:我们有一个16位微处理器,如果16位值未对齐,将给处理器对齐错误.在以下情形中可能会发生这种情况:
typedef struct
{
U8BIT u8BitValue1;
U8BIT u8BitValue2;
U8BIT u8BitValue3;
} unevenAmountOf8BitValues;
typedef struct
{
U16BIT u16BitValue1;
U16BIT u16BitValue2;
} my16BitValues;
#define U8BIT_COUNT 3
#define U16BIT_COUNT 2
typedef struct
{
unevenAmountOf8BitValues u8BitValues;
my16BitValues u16BitValues;
} valuesCombined;
typedef union
{
valuesCombined myValues;
U8BIT buffer[sizeof(valuesCombined)];
struct
{
U8BIT bufferU8[U8BIT_COUNT];
U16BIT bufferU16[U16BIT_COUNT]; /* <<-- missalignment */
} valuesPerType;
} myValuesInRamAndRom
Run Code Online (Sandbox Code Playgroud)
我们现在所做的是手动计算U8BIT/U16BIT/U32BIT值的数量(以及使用excel跟踪数量)并将其放入U(8/16/32)BIT_COUNT定义中,然后执行以下操作:
#if U8BIT_COUNT % 2 == 1
#error The number of U8BIT parameters need to be …Run Code Online (Sandbox Code Playgroud) 是的,所以我的任务是找出GIT是否能解决我们即将出现的问题.(轻松创建功能分支,修补程序分支,错误修复分支,同时保持主干干净,只有功能完成的问题(功能,修补程序,错误修复等).因此,一旦需要完成发布,将不会发布半完成/已提交的问题.
以前我们一直在使用SVN,其中包含git-flow /分支模型的修改版本:http://nvie.com/img/git-model@2x.png git-master是我们的svn-trunk.这是有效的,但对SVN来说有点麻烦.特别是因为我们使用了两个共享存储库.
这就是问题所在.以前我们使用这两个共享存储库作为外部,并且所有外部引用都指向lib/a/branches/develop和lib/b/branches/develop.如果需要功能/修补程序/ bugfix分支,这很麻烦,因为它需要创建三个分支,使用新引用修改超级项目,然后提交所述更改.
经过一些小心的修补,我们转而使用库存储库的分支.(所以,superProject/lib/a是一个分支lib/a/branches/develop)和未来的更新(两种方式)将要求从superProject/lib/ain到合并lib/a/branches/develop或反之亦然.
然而,一旦释放即将到来,这仍然无法解决我们半完成提交的问题.(遗憾的是,在我工作的公司,这可能需要一个小时).所以我们想了一点,并同意开始尝试使用Atlassian提供的工具多一点,从而尝试Bitbucket(之前使用Crucible/FishEye)并使用他们特殊的集成工作流程来git,每个问题的分支都可以创建并完成后,可以创建一个拉取请求,以便我们的发布管理器控制下一个版本中的内容和内容./develop/由于所有问题都将使用所述工作流程完成,因此不再是半生不熟的问题.
我面临的问题是如何合并这些共享项目(库a和b).我一直在阅读网页,发现多个网站都在谈论git-submodules,git-subtree-merge-strategy,git-subtree(脚本)和手动合并(与子树合并相同?).但没有人真正回答我的一些新手问题.到目前为止,我一直对git-subtree最感兴趣,但GUI支持似乎很糟糕.TortoiseGit,SourceTree都没有对git-subtree有一些很好的GUI支持,这需要命令行动作,而且对大多数同事来说,他们不喜欢做命令行事情.
还困扰我的是,没有好的,我能找到的,关于从哪个存储库/分支创建git-subtree的信息,以及来自远程git存储库的克隆不会自动包含正确的远程链接的事实对于任何git子树.因此,如果我不想让我的任何开发人员能够从他们的远程源更新git子树,他们将不得不手动执行git remote add -f libraryXXX http://repohere/lib-xxx.git(一次)然后执行git subtree pull --prefix locationGoesHere libraryXXX master (--squash optional)
这一切看起来都比SVN的工作流程更加繁琐,并且来回合并分支.我错过了什么吗?我读的是过时的信息吗?我只是没有看到使用共享存储库的正确方法?
我使用的一些资源:
在Python中,您可以拥有以下内容:
def foo(param1, param2):
def bar():
print param1 + param2
bar()
Run Code Online (Sandbox Code Playgroud)
我在PHP中遇到这种行为有些困难.我希望这可以通过以下方式工作:
function foo($param1, $param2)
{
function bar()
{
echo $param1 + $param2;
}
bar();
}
Run Code Online (Sandbox Code Playgroud)
但那失败了.所以我读了一些关于闭包的内容(这被称为闭包不是吗?它是在Python中,我知道).在关于匿名函数的php文档中(他们说它们已被实现为闭包),它们告诉您以下列方式使用use()表达式:
function foo($param1, $param2)
{
function bar() use($param1, $param2)
{
echo $param1 + $param2;
}
bar();
}
Run Code Online (Sandbox Code Playgroud)
但那仍然失败.所以我把它改成了PHP-anonymous函数,就像这样:
function foo($param1, $param2)
{
$bar = function() use($param1, $param2)
{
echo $param1 + $param2;
};
$bar();
}
Run Code Online (Sandbox Code Playgroud)
这确实有效,但它看起来真的很难看.我错过了什么吗?我可以用任何方式改进吗?或者我只需要使用'丑陋'的方式?
(我不是在寻找关于闭包是否有用的讨论)
有没有办法删除以下if语句来检查该值是否低于0?
int a = 100;
int b = 200;
int c = a - b;
if (c < 0)
{
c += 3600;
}
Run Code Online (Sandbox Code Playgroud)
值c应在0和3600之间都撒谎a和b签名.值a也应介于0和3600之间.(是的,它是0.1度的计数值).该值通过中断复位到3600,但如果该中断来得太晚,它会下溢,这不是问题,但软件应该仍然能够处理它.它做的.
我们if (c < 0)在相当一些计算位置的地方进行检查.(计算新职位等)
我曾经习惯使用模数运算符来使用除数的符号,我们的编译器(C89)正在使用除数签名.
有没有办法以不同的方式进行此计算?示例结果:
a - b = c
100 - 200 = 3500
200 - 100 = 100
Run Code Online (Sandbox Code Playgroud) 我一直在研究一个有属性的类,但是我们遇到了一个令人讨厌的pylint问题(0.25.1)在下面的代码中我们定义了一个带有属性的类,它们是在python 2.6中引入的.但是,pylint抱怨这个事实在该__init__方法self.aProperty中将覆盖名为aProperty的已定义方法.我还粘贴了控制台的输出和pylint消息的输出.
这是"请向pylint devs报告"还是这段(示例)代码错误?
"""example module"""
class Example(object):
"""example class"""
@property
def aProperty(self):
"""get"""
print "using getter"
return self._myPropertyValue
@aProperty.setter
def aProperty(self, value):
"""set"""
print "using setter"
self._myPropertyValue = value
def secondPublicMethodToIgnorePylintWarning(self):
"""dummy"""
return self.aProperty
def __init__(self):
"""init"""
self._myPropertyValue = None
self.aProperty = "ThisStatementWillRaise E0202"
anExample = Example()
print anExample.aProperty
anExample.aProperty = "Second binding"
print anExample.aProperty
Run Code Online (Sandbox Code Playgroud)
控制台输出:
使用setter
使用getter 使用setter 使用setter 使用getter进行 第二次绑定使用
setterWillRaise E0202
Pylint输出:
E0202:7,4:Example.aProperty:test1第26行中受影响的属性隐藏此方法
E0202:13,4:Example.aProperty:test1第26行中受影响的属性隐藏此方法
c ×4
python ×3
.net ×1
architecture ×1
c# ×1
c++ ×1
class ×1
closures ×1
git ×1
git-subtree ×1
optimization ×1
performance ×1
php ×1
pylint ×1
struct ×1
svn ×1
tortoisegit ×1