小编Daa*_*mer的帖子

将结构初始化为0

如果我有这样的结构:

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)

c struct initialization

104
推荐指数
4
解决办法
14万
查看次数

不可变字典,仅用作另一个字典的键

我需要实现一个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)

python

26
推荐指数
5
解决办法
3万
查看次数

AppDomain,处理异常

我正在开发一个大型应用程序,它包含许多较小的插件/应用程序.

它们不够大,不足以成为一个完整的进程,但是在一个进程中,它太小而无法在一个线程中运行,而我希望它基于一个插件基础.如果该插件的较新版本可用,则应该卸载,更新并重新启动.

在我寻找解决方案期间,我可以使用魔术字AppDomain,我引用:

"使用应用程序域来隔离可能导致进程失效的任务.如果正在执行任务的AppDomain状态变得不稳定,则可以卸载AppDomain而不会影响进程.当进程必须长时间运行而不重新启动时,这很重要您还可以使用应用程序域来隔离不应共享数据的任务."

因此,这正是我想要的.但是,我猜他们的"状态变得不稳定"与我的观点不同.我正在考虑一个问题,其中一个插件抛出异常,无论出于何种原因.我想抓住,通过电子邮件发送,卸载并重启(如果可能的话).

所以我创建了一个启动的应用程序,查找其文件夹中的所有.dll文件.检查dll是否包含插件.为该插件创建一个新的AppDomain,一旦加载了所有内容,它将启动每个插件.(每个插件可以由多个线程组成,与其他插件紧密共存).

所以我还在那里添加了一个超时,在5秒之后触发抛出一个新的Exception(); 在AppDomain上添加了UnhandledException事件来处理它.但是,它抓住了它,并且在导航之后,仍然"崩溃"了整个过程,包括所有额外的孩子 - AppDomains.

但它在报价中明确指出"隔离"可能"打倒流程"的任务.我错过了一些重要的东西吗?我对报价的看法是错误的吗?

.net c#

15
推荐指数
3
解决办法
8716
查看次数

c/c ++(VS2008)用引号括起宏参数

对于需要一定程度调试的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"作为第三个参数传递.

我对这个预处理器宏发生的事情的了解是非常有限的,因此我的谷歌搜索能力也是无用的,因为不知道在哪里搜索确切.

我希望你们其中一个人/女孩能给我一个解决方案,或指出我正确的方向.

c c++ visual-studio-2008 c-preprocessor

10
推荐指数
1
解决办法
2787
查看次数

如何动态添加mixins作为基类而不会出现MRO错误?

说我有一节课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服务器在那里AB将是在启动时加载的插件.它们驻留在自己的文件夹中.

我也有一个名为的类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)

python architecture class method-resolution-order

10
推荐指数
1
解决办法
5057
查看次数

编译时结构大小检查,如果奇数错误输出

如果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)

c

9
推荐指数
3
解决办法
5697
查看次数

从SVN转移到GIT,将工作流更改从SVN合并到具有共享存储库的GIT

是的,所以我的任务是找出GIT是否能解决我们即将出现的问题.(轻松创建功能分支,修补程序分支,错误修复分支,同时保持主干干净,只有功能完成的问题(功能,修补程序,错误修复等).因此,一旦需要完成发布,将不会发布半完成/已提交的问题.

以前我们一直在使用SVN,其中包含git-flow /分支模型的修改版本:http://nvie.com/img/git-model@2x.png git-master是我们的svn-trunk.这是有效的,但对SVN来说有点麻烦.特别是因为我们使用了两个共享存储库.

这就是问题所在.以前我们使用这两个共享存储库作为外部,并且所有外部引用都指向lib/a/branches/developlib/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的工作流程更加繁琐,并且来回合并分支.我错过了什么吗?我读的是过时的信息吗?我只是没有看到使用共享存储库的正确方法?

我使用的一些资源:

svn git tortoisegit git-subtree atlassian-sourcetree

9
推荐指数
1
解决办法
150
查看次数

具有函数内函数的变量的范围?

在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)

这确实有效,但它看起来真的很难看.我错过了什么吗?我可以用任何方式改进吗?或者我只需要使用'丑陋'的方式?

(我不是在寻找关于闭包是否有用的讨论)

php closures anonymous-function

7
推荐指数
1
解决办法
326
查看次数

如何避免在此操作中使用C分支

有没有办法删除以下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之间都撒谎ab签名.值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)

c optimization performance

7
推荐指数
3
解决办法
444
查看次数

Pylint E0202误报?或者这段代码是错的?

我一直在研究一个有属性的类,但是我们遇到了一个令人讨厌的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行中受影响的属性隐藏此方法

python pylint

6
推荐指数
1
解决办法
3495
查看次数