我正在尝试全局初始化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 ++解决方案?即命名结构初始化不起作用的一个(因为它在语言中不存在)?
有谁知道prlimit64()C函数的作用是什么?我的 x86_64 Ubuntu 机器上似乎没有它,但它存在于 Arch 中,而且我似乎找不到任何人或事物知道它的作用。
因此,存在一种通过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.但是,我需要找到工会然后交叉点,所以感觉这对于一套是合适的(但我愿意接受使用你认为值得的任何魔法的解决方案,只要它能解决我的问题!)