小编spe*_*ras的帖子

类型双关主题的变化:就地琐碎构造

我知道这是一个很常见的主题,但尽管很容易找到典型的 UB,但到目前为止我还没有找到这个变体。

所以,我试图正式引入 Pixel 对象,同时避免数据的实际副本。

这是有效的吗?

struct Pixel {
    uint8_t red;
    uint8_t green;
    uint8_t blue;
    uint8_t alpha;
};

static_assert(std::is_trivial_v<Pixel>);

Pixel* promote(std::byte* data, std::size_t count)
{
    Pixel * const result = reinterpret_cast<Pixel*>(data);
    while (count-- > 0) {
        new (data) Pixel{
            std::to_integer<uint8_t>(data[0]),
            std::to_integer<uint8_t>(data[1]),
            std::to_integer<uint8_t>(data[2]),
            std::to_integer<uint8_t>(data[3])
        };
        data += sizeof(Pixel);
    }
    return result; // throw in a std::launder? I believe it is not mandatory here.
}
Run Code Online (Sandbox Code Playgroud)

预期使用模式,大大简化:

std::byte * buffer = getSomeImageData();
auto pixels = promote(buffer, 800*600);
// manipulate pixel data
Run Code Online (Sandbox Code Playgroud)

进一步来说:

  • 这段代码有明确定义的行为吗? …

c++ placement-new object-lifetime language-lawyer reinterpret-cast

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

使用GenericForeignKey与多重继承与OneToOneField相比,有什么优缺点?

上下文

我正在使用Django模型建模我的数据.主要模型是Article.它包含实际内容.

然后每个Article必须附加到一组文章.那些群体可能是a Blog,Categorya Portfolio或a Story.每一个都Article必须附在一个,而且恰好是其中之一.也就是说,无论是博客,类别还是故事.这些模型具有非常不同的领域和功能.

我想到了达到目标的三种方法(以及真正看起来错误的奖励).

选项#1:通用外键

如在django.contrib.contenttypes.fields.GenericForeignKey.它看起来像这样:

class Category(Model):
    # some fields

class Blog(Model):
    # some fields

class Article(Model):
    group_type = ForeignKey(ContentType)
    group_id = PositiveIntegerField()
    group = GenericForeignKey('group_type', 'group_id')
    # some fields
Run Code Online (Sandbox Code Playgroud)

在数据库方面,这意味着模型之间实际上不存在任何关系,它们由Django强制执行.

选项#2:多重继承

使文章组全部从ArticleGroup模型继承.这看起来像这样:

class ArticleGroup(Model):
    group_type = ForeignKey(ContentType)

class Category(ArticleGroup):
    # some fields

class Blog(ArticleGroup):
    # some fields

class Article(Model):
    group = ForeignKey(ArticleGroup)
    # some fields
Run Code Online (Sandbox Code Playgroud)

在数据库方面,这创造了一个额外的表ArticleGroup,然后Category和 …

database django

8
推荐指数
1
解决办法
903
查看次数

在Ember 2.0中存储瞬态UI状态的位置

Ember 2.0已经不遗余力地将一切都变成了一个组件.随着可路由的组件即将推出,控制器也可能会逐步淘汰.

上下文

但是,在构建用户界面时我遇到了一个反复出现的问题,到目前为止我还没有令人满意的模式:用户界面状态.

我在做什么?

  • 选择状态
  • 目前的焦点
  • 某些树形显示中的折叠/展开状态

基本上,任何不属于实际数据的状态,但必须逐个对象地跟踪.在过去,过去常常将其Controllers作为模型的代理.这种方法现在已经过时了.新方法Components无处不在,越来越好.组件执行簿记,跟踪瞬态并且您可以恢复操作.

但是,我的典型模式是共享状态,例如带有可选项的列表.

问题

构建列表组件,具有以下要求:

  • 可以选择每个项目.
  • 选择状态更改DOM(某些类绑定).
  • 用户可以在列表组件中绘制一个矩形,一次选择多个项目.
  • 理想情况下,整个行为可以作为mixin抽象出来.

问题:选择标志在哪里?

尝试

1)一切都是一个组成部分.

我将每个项目都设为子组件,比如{{my-list-item}}.该组件跟踪选择状态.问题:列表组件如何更新选择状态?

2)将状态移出子组件.

把它放在列表组件上.在项目列表旁边的单独状态数组中.优点:列表具有所需的所有状态.缺点:在列表中添加或删除项目时保持同步是一场噩梦.这意味着子组件无法访问该状态.或者也许我可以将它作为绑定值传递给它们?

3)重新引入代理.

想到它,有一种方法可以分享一些状态:把它放在模型上.好吧,不是在实际的模型上,以免污染它们与本地状态,但通过设置一个ArrayProxy将返回ObjectProxy每个项目的一些,以保持状态.

优点:这是我设法完全实现的唯一解决方案.缺点:封装和封装物品是一件麻烦事.此外,经过几层传递,get并且set必须通过4 ou 5代理,我担心这将是性能问题.

此外,它不适用于mixins.如果我想抽出一些HasSelectionmixin,HasFoldableItemsmixin和Sortablemixin,他们都需要一些状态.

回到绘图板

是否有一些我没有找到的更好的模式?

我发现了以下相关问题,但这导致我无处可寻:

ember.js

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

有没有比 pickle 或常规 Python 文件更快的存储大字典的方法?

我想存储一个只包含以下格式数据的字典:

{
    "key1" : True,
    "key2" : True,
    .....
}
Run Code Online (Sandbox Code Playgroud)

换句话说,这只是一种检查密钥是否有效的快速方法。我可以通过在名为foo的文件中存储一个 dict 来做到这一点bar.py,然后在我的其他模块中,我可以按如下方式导入它:

from bar import foo
Run Code Online (Sandbox Code Playgroud)

或者,我可以将其保存在一个名为 的pickle 文件中bar.pickle,然后按如下方式将其导入到文件顶部:

import pickle  
with open('bar.pickle', 'rb') as f:
    foo = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

哪种方法是理想且更快的方法?

python pickle

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

打印文件作为参数传入

我有一个非常简单的python脚本,它应该打印一个像这样传递的文件的内容:python script.py stuff.txt.我没有得到任何输出.

这是代码:

import sys
fname = sys.argv[1]
f = open(fname, 'r')
f.read()
Run Code Online (Sandbox Code Playgroud)

从我所读到的,这应该是有效的.为什么不?

python file

0
推荐指数
1
解决办法
54
查看次数