小编Fip*_*ipS的帖子

在所有情况下更喜欢C++引用指针是否真的是最佳做法?

C++ FAQ说:

"尽可能使用引用,并在必要时使用引用."

我觉得它不像上面说的那么容易.已经很好地讨论了引用通常对指针更好的原因.所以我宁愿讨论特殊情况,其中引用有意义,但非常不寻常,只是感觉不对:

对我来说,最明显的情况是它们在一般数据结构(如树或链表)中的使用.他们的接口当然可以使用引用来实现并且感觉更安全,但是我还没有看到可以利用引用的单个实现,例如:

Node *parent = n.parent(); // parent might be unset -> pointer
Node &child = n.child(5); // child is always valid -> reference
Run Code Online (Sandbox Code Playgroud)

虽然它看起来很有吸引力,但它会导致代码如下:

if(parent == &child) ... //  weird, unusual at least?
Run Code Online (Sandbox Code Playgroud)

我想知道,这是什么代表纯C++?

每当我试图在任何可能的地方盲目地使用引用时,我都会遇到各种类似的不一致,并最终以各种丑陋的方式混合指针和引用.

总而言之,为什么operator new不首先返回对新实例的引用而不是指针?(并在出现错误时抛出):

Node &n = new Node;
delete &n;
Run Code Online (Sandbox Code Playgroud)

这是一个荒谬的例子,但这不是"纯粹的C++"吗?

c++

13
推荐指数
3
解决办法
3291
查看次数

如何创建一个代理模型,将QAbstractItemModel的节点展平为PySide中的列表?

我有一个由自定义QAbstractItemModel表示的节点层次结构.是否有可能创建一个代理模型,将层次结构展平为一个列表,以允许我在QListView中显示所有节点/项目(没有代理只有树的第一级呈现)?

A                           A
+---1                       1
    2                       2
    +--3                    3
    4            =>         4
B                           B
+---5                       5
    6                       6
    +--7                    7
       8                    8
Run Code Online (Sandbox Code Playgroud)

谢谢,FipS

qt pyqt pyside

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

如何比较两个 ctypes 对象的相等性?

import ctypes as ct

class Point(ct.Structure):
    _fields_ = [
        ('x', ct.c_int),
        ('y', ct.c_int),
    ]

p1 = Point(10, 10)
p2 = Point(10, 10)

print p1 == p2 # => False
Run Code Online (Sandbox Code Playgroud)

等式运算符 ' == '在上面的琐碎情况下给出False。有没有直接的方法?

编辑:

这是一个稍微改进的版本(基于接受的答案),它也可以处理嵌套数组:

import ctypes as ct

class CtStruct(ct.Structure):

    def __eq__(self, other):
        for field in self._fields_:
            attr_name = field[0]
            a, b = getattr(self, attr_name), getattr(other, attr_name)
            is_array = isinstance(a, ct.Array)
            if is_array and a[:] != b[:] or not is_array and a != b:
                return False
        return …
Run Code Online (Sandbox Code Playgroud)

python ctypes

5
推荐指数
1
解决办法
1604
查看次数

标签 统计

c++ ×1

ctypes ×1

pyqt ×1

pyside ×1

python ×1

qt ×1