小编Ben*_*ott的帖子

工会初始化

我正在尝试全局初始化union,如下例所示:

#include <cstdio>

typedef union {
    char t[4];
    int i;
} a;

enum {
    w = 5000,
    x,
    y,
    z
};

a temp = {w};
int main() {
    printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你运行代码,你会注意到temp.i或temp.t [...]实际上都没有提供正确的项目我初始化了联合.我想如果我可以手动初始化整数成员,这将被避免,但不幸的是我不能.我也无法改变结构中元素的排序(交换int和char命令正确地初始化所有内容) - 它们实际上是由外部库提供的.我的问题是:如何全局设置结构的整数成员,而不是char [4]成员(或者,在这种情况下,只是char []的第一个元素)?

编辑:此外,这个问题是否有严格的c ++解决方案?即命名结构初始化不起作用的一个(因为它在语言中不存在)?

c c++ unions

7
推荐指数
4
解决办法
2504
查看次数

prlimit64() Linux 函数

有谁知道prlimit64()C函数的作用是什么?我的 x86_64 Ubuntu 机器上似乎没有它,但它存在于 Arch 中,而且我似乎找不到任何人或事物知道它的作用。

c linux linux-kernel archlinux

5
推荐指数
2
解决办法
2975
查看次数

Python自定义集合交集

因此,存在一种通过set.intersection()计算两个集合的交集的简单方法.但是,我有以下问题:

class Person(Object):                    
    def __init__(self, name, age):                                                      
        self.name = name                                                                
        self.age = age                                                                  

l1 = [Person("Foo", 21), Person("Bar", 22)]                                             
l2 = [Person("Foo", 21), Person("Bar", 24)]                                             

union_list = list(set(l1).union(l2))                                           
# [Person("Foo", 21), Person("Bar", 22), Person("Bar", 24)]
Run Code Online (Sandbox Code Playgroud)

(Object是我的ORM提供的基类,它实现了基本__hash____eq__功能,它基本上将类的每个成员添加到哈希.换句话说,__hash__返回的将是类的每个元素的哈希)

在这个阶段,我想只运行一个集合交叉运算.name,比如说Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)].(典型的.intersection()在这一点上不会给我什么,我不能重写__hash__或者__eq__Person类,因为这会覆盖原有的并集(我认为)

在Python 2.x中执行此操作的最佳方法是什么?

编辑:请注意,该解决方案不具有依靠set.但是,我需要找到工会然后交叉点,所以感觉这对于一套是合适的(但我愿意接受使用你认为值得的任何魔法的解决方案,只要它能解决我的问题!)

python python-2.x set-intersection

5
推荐指数
2
解决办法
5523
查看次数