小编Mak*_*gan的帖子

python的re:如果正则表达式包含在字符串中,则返回True

我有一个像这样的正则表达式:

regexp = u'ba[r|z|d]'
Run Code Online (Sandbox Code Playgroud)

如果单词包含bar,bazbad,则函数必须返回True .简而言之,我需要用于Python的正则表达式模拟

'any-string' in 'text'
Run Code Online (Sandbox Code Playgroud)

我怎么才能意识到这一点?谢谢!

python regex

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

如何分配重复的字段?

我在python中使用协议缓冲区,我有内部Person消息

repeated uint64 id
Run Code Online (Sandbox Code Playgroud)

但是当我尝试分配时

person.id = [1, 32, 43432]
Run Code Online (Sandbox Code Playgroud)

我得到错误Assigment not allowed for repeated field "id" in protocol message object 如何分配给重复的字段?

python protocol-buffers

66
推荐指数
4
解决办法
5万
查看次数

有没有办法在C++源代码中用空格写一个大数字,以使其更具可读性?

想象一下,我有代码:

vector<int> temp = vector<int>(1 000 000 000);
Run Code Online (Sandbox Code Playgroud)

上面不会编译,因为编译器会抱怨空格.是否可以指示C++在编译时省略这些空格,或者使数字更容易阅读?

c++ syntax numbers

43
推荐指数
3
解决办法
6651
查看次数

在没有显式命令的情况下在函数调用之间清除数组指针数据?

我有以下问题:

在C++程序中,我有一个声明为的全局数据结构Renderer Rendering_Handler,其中包含一个定义为的成员字段vector<Render_Info> visble objects.

数据结构本身正在做什么并不重要,它们是抽象数据以并行化我的程序所需的包装器.

要清楚,Rendering_Handler是完全全局的,它实际上是一个单例(我可以100%确认构造函数已被调用一次,对于此类只调用一次).

我已经声明了以下类方法:

Render_Info* Renderer::add_Render_Info()
{
    visible_objects.push_back(Render_Info());
    return &(visible_objects.back());
}
Run Code Online (Sandbox Code Playgroud)

很简单,它创建一个新Render_Info结构,将它附加到visible_objects数组并返回指向该对象的指针.

调用的另一个数据结构Chunk具有定义为的构造函数

Chunk::Chunk(vec3 offset, World* w) 
{
    /*initialize some values*/

    draw_info = Rendering_Handler->add_Render_Info();
    draw_info->VBOs = vector<GLuint>(5);

    /*initialize OpenGL VAOs, VBOs and other buffer objects*/

    cout << draw_info->VBOs.size() << endl;
    cout << draw_info << endl;
}
Run Code Online (Sandbox Code Playgroud)

它还有一个定义为的方法:

void Chunk::update_render_info()
{
    cout << draw_info->VBOs.size() << endl;
    cout << draw_info << endl;

    /*OpenGL stuff*/

}
Run Code Online (Sandbox Code Playgroud)

最后

我们有初始化所有内容的方法:

World::World() …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-management

26
推荐指数
1
解决办法
574
查看次数

在多线程程序中创建OpenGL结构?

我正在尝试在我正在构建的物理引擎中执行以下操作:

有2个线程,一个用于世界逻辑,一个用于渲染.

主线程(创建其他线程的线程)是渲染线程,然后世界线程从它分叉.

在渲染线程上有一个称为渲染处理程序的全局数据结构,声明为:

 class Renderer
{
    private:
        /*
          shader stuff
        */
        mutex busy_queue;
        vector<Render_Info*> render_queue;

    public:
        /*
           Bunch of methods
        */
        void add_data(Render_Info*);
        void render();
};
Run Code Online (Sandbox Code Playgroud)

并且Render_Info结构声明为:

struct Render_Info
{
    mutex info_lock;
    GLuint VAO;
    vector<GLuint> VBOs;
    vector<GLuint> types;
    uint layouts;
    uint render_instances;
    Mesh* geometry;
};

extern Renderer *Rendering_Handler;
Run Code Online (Sandbox Code Playgroud)

这里的想法如下.任何希望渲染某些东西的线程都必须处理它自己的数据并将其放入OpenGL原语中.然后它将该信息放入一个Render_Info对象中,该对象充当线程和呈现线程之间的消息.

然后该线程使用该add_data()方法发送指向它的数据消息的指针,该数据消息被附加到render_queueas:

void Renderer::add_data(Render_Info* data)
{
    busy_queue.lock();
    render_queue.push_back(data);
    busy_queue.unlock();
}
Run Code Online (Sandbox Code Playgroud)

最后,当渲染线程选择渲染某些东西时,它会锁定队列(阻止任何东西被添加到队列中)渲染所有内容,然后清除队列.

当然,现在需要更多的线程协调,但这是这个想法的要点.

问题是,我只是试图创建OpenGL VAO和VBO而产生分段错误,更不用说填充数据了.

据我所知,OpenGL远离线程安全,因为长颈鹿不是海豚.

问题的原因似乎是OpenGL上下文属于主线程,所以当我尝试在世界线程上创建VAO和VBO时,OpenGL会崩溃,因为它不知道发生了什么.

那么我可以做多线程程序呢?

我希望保持尽可能接近我所描述的设计,除非有人提供一个很好的理由说明为什么它不起作用.

c++ opengl multithreading

15
推荐指数
1
解决办法
1248
查看次数

警告“重定向到”实际上是什么意思?

我注意到有时当我git pull一个项目时,会有一条消息说:

"warning: redirecting to <url>"
Run Code Online (Sandbox Code Playgroud)

我尝试搜索它的含义,但没有发现任何有用的信息。它是什么?

git url warnings pull

12
推荐指数
3
解决办法
5031
查看次数

Argparse 不解析布尔参数?

我正在尝试制作这样的构建脚本:

import glob
import os
import subprocess
import re
import argparse
import shutil

def create_parser():
    parser = argparse.ArgumentParser(description='Build project')

    parser.add_argument('--clean_logs', type=bool, default=True,
                        help='If true, old debug logs will be deleted.')

    parser.add_argument('--run', type=bool, default=True,
                        help="If true, executable will run after compilation.")

    parser.add_argument('--clean_build', type=bool, default=False,
                        help="If true, all generated files will be deleted and the"
                        " directory will be reset to a pristine condition.")

    return parser.parse_args()


def main():
    parser = create_parser()
    print(parser)
Run Code Online (Sandbox Code Playgroud)

然而,无论我如何尝试传递参数,我都只能得到默认值。我总是得到Namespace(clean_build=False, clean_logs=True, run=True)

我努力了:

python3 build.py --run False …
Run Code Online (Sandbox Code Playgroud)

python command-line arguments argparse

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

向 Gitlab 添加了 SSH 密钥,但它仍然要求我提供凭据

当我输入凭据时,GitLab 的 HTTP 拉取和推送工作正常。

但是当使用添加的 SSH 密钥时,它总是询问我的密码,我不知道。GitLab 为什么要这样做?是服务器故障吗?

调用时ssh -vT git@git.com出现错误:

权限被拒绝(公钥)

我已经尝试了一切,甚至重新安装 Git,但没有任何效果。甚至他们自己的解决方案也不起作用,如下所述:https : //help.github.com/articles/error-permission-denied-publickey/

git ssh permission-denied gitlab

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

Vulkan中的队列家庭实际上是什么?

我目前正在学习vulkan,现在我只是分解每个命令并检查结构以尝试理解它们的含义。

现在,我正在分析QueueFamilies,为此我有以下代码:

vector<vk::QueueFamilyProperties> queue_families = device.getQueueFamilyProperties();
for(auto &q_family : queue_families)
{
    cout << "Queue number: "  + to_string(q_family.queueCount) << endl;
    cout << "Queue flags: " + to_string(q_family.queueFlags) << endl;
}
Run Code Online (Sandbox Code Playgroud)

这将产生以下输出:

Queue number: 16
Queue flags: {Graphics | Compute | Transfer | SparseBinding}
Queue number: 1
Queue flags: {Transfer}
Queue number: 8
Queue flags: {Compute}
Run Code Online (Sandbox Code Playgroud)

所以,我天真地这样理解:

有3个队列族,一个队列族有16个队列,所有队列都可以进行图形,计算,传输和稀疏绑定操作(不知道最后两个是什么)

另一个有1个队列,只能传输(无论是什么)

最后一个有8个能够进行计算操作的队列。

每个队列家庭是什么?我知道这是我们发送绘图和交换缓冲区之类的执行命令的地方,但这是一个较宽泛的解释,我希望获得更多知识的详细答案。

2个额外的标志是什么?转移和稀疏出价?

最后,为什么我们要/需要多个命令队列?

c++ hardware gpu vulkan

7
推荐指数
2
解决办法
1046
查看次数

使用 QPainter 绘制带有渐变边缘的线条和曲线

QPainter 很容易使用,画一条线只需这样做:

QPainter painter(&image);
QPen pen;
pen.setWidth(5);
pen.setColor("black");
painter.setPen(pen);
painter.drawLine(QPointF(0,0), QPointF(200,250));
Run Code Online (Sandbox Code Playgroud)

现在这很好用,但我想创建一个“特殊”的笔,产生带有“平滑”边缘的线条。例如,假设我要绘制的线条的粗细为 10 像素,那么我希望线条的中间(中间我指的是粗细而不是长度)完全不透明,并且在线条的边缘应该变得半透明。我相信这可以得到,例如将下面的图片作为我的点,然后“拖动”并绘制线条,这样我就会获得我想要的效果。我知道 Qt 为您提供了QBrush渐变,但我不知道如何做到这一点。

图片

c++ graphics qt qpainter

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