小编Ben*_*ois的帖子

C中的函数指针 - 性质和用法

我刚刚在这里阅读了一个有趣的问题,让我想到了另外两件事:

  1. 为什么有人应该比较函数指针,因为通过概念,函数的唯一性由它们的不同名称来保证?
  2. 编译器是否将函数指针视为特殊指针?我的意思是它看到他们喜欢,让我们说,指针void *或是否持有更丰富的信息(如返回类型,论点和论据类型的号码?)

c pointers compilation

32
推荐指数
4
解决办法
5322
查看次数

检查 VSCode 中一系列行的 git 历史记录

VSCode 是否可以显示一系列行的 git 历史记录?

假设我有 1000 个与此文件相关的提交,并且此文件中的一系列行在提交 24 上进行了最后更改,我必须在编辑器中检查 976 个提交。

在这里看到了一些相关内容,但是可以直接在IDE中吗?

git-blame visual-studio-code

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

Google Test - 生成模板类实例化的值

我在使用 Google 测试时遇到问题。我有一个相当于以下内容的代码:


template<int N> class A {
public:
    A() {}
    A(int n) {
        var = n;
    }
    int var;
};
Run Code Online (Sandbox Code Playgroud)

测试_A.cpp

#include "gtest/gtest.h"
#include "A.h"

template<typename T> class TestA : public ::testing::Test {};

TYPED_TEST_CASE_P(TestA);

TYPED_TEST_P(TestA, SomeTest){
    TypeParam x(0);
    EXPECT_EQ(x.var,0);
    ...
}

REGISTER_TYPED_TEST_CASE_P(TestA, SomeTest);

typedef ::testing::Types<A<0>, A<1>, A<2>, A<3>, A<4>, A<5> ... A<511>, A<512>> MyTypes;
INSTANTIATE_TYPED_TEST_CASE_P(My, TestA, MyTypes);

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

总而言之,我想SomeTest在类上运行A多个版本的测试N。使用上面开发的类型参数化测试,问题是使用“类型化测试”方法,我必须手动编写A …

c++ templates googletest c++11

4
推荐指数
1
解决办法
2476
查看次数

std::map 分配是否尽可能静态?

考虑具有相同效果的 3 个版本的代码:

版本1:

int main()  {
    std::map<int,int> x = {{0,0}, {1,1}, {2,2}};
    // Do some stuff...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

版本2:

int main()  {
    std::map<int,int> x;
    x[0] = 0;
    x[1] = 1;
    x[2] = 2;
    // Do some stuff...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

版本3:

int main()  {
    std::map<int,int> x;
    x.insert(std::pair<int,int>(0,0));
    x.insert(std::pair<int,int>(1,1));
    x.insert(std::pair<int,int>(2,2));
    // Do some stuff...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这些代码的效率是多少?

我认为版本 1 是完全静态分配:x分配一次所需的空间并设置值。我还认为版本 3 需要动态分配:每次调用 insert 都会检查该键是否尚未使用,检查插入位置并在分配值之前分配更多空间来映射。对于版本 2,我不确定。你能帮我吗?

c++ memory-management dynamic-memory-allocation

4
推荐指数
1
解决办法
2344
查看次数

C++模板 - 几个特化 - 是行为定义的吗?

让我们假设我声明了一个模板化的结构:

template <int N> struct mystruct;
Run Code Online (Sandbox Code Playgroud)

让我们假设我的结构对所有人都有一般行为N,除非是N == 0

我可以声明一个特殊的行为N == 0:

template<> struct mystruct<0> {int k = 0};
Run Code Online (Sandbox Code Playgroud)

我也可以用以下方式声明一般行为:

template<int N> struct mystruct {float k = 3.14;};
Run Code Online (Sandbox Code Playgroud)

如果我在主要运行:

struct mystruct<-1> x;
struct mystruct<0> y;
struct mystruct<1> z;
std::cout << x.k << " " << y.k << " " << z.k << std::endl;
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的东西:3.14 0 3.14无论模板声明的顺序如何.

但是我想知道这种行为是否有保险.的确,当我宣布:

struct mystruct<0> y;

在我看来,这也可以通过两种mystruct实现来定义.

所以问题是:

C++规范化是否确保模板专门化<0>覆盖一般基本实现<int N>,无论代码中的模板专业化顺序是什么?

c++ templates template-specialization

3
推荐指数
1
解决办法
108
查看次数

C++嵌套类中的"this"关键字

如果我有以下嵌套类:

class foo {
public:
    class bar {
    public:
        int barMethod() const;
    protected:
        int barVar;
    };

protected:
    int fooVar;
};
Run Code Online (Sandbox Code Playgroud)

然后在.cpp中,我可以用barMethod()这种方式实现吗?

int foo::bar::barMethod() const {
    return this->fooVar + this->barVar;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是:this嵌套类中的关键字是否指向层次结构中上游的所有类?

c++ nested class this

3
推荐指数
1
解决办法
212
查看次数

如何通过 ffmpeg-python 使用多输入过滤器

我想用 ffmpeg-python 模仿以下 ffmpeg 命令

ffmpeg -y -i in.mp4 -t 30 -filter_complex "fps=10,scale=-1:-1:flags=lanczos[x];[0:v]palettegen[y];[x][y]paletteuse" out.gif

到目前为止,这就是我所得到的:

in_stream = ffmpeg.input(src, ss=start_time, t=(stop_time-start_time))
scale_input = in_stream
if fps >= 1:
    stream = ffmpeg.filter(in_stream['v'], 'fps', fps)
    scale_input = stream

stream = ffmpeg.filter(scale_input, 'scale', output_width, output_height, 'lanczos')

palette = ffmpeg.filter(in_stream['v'], 'palettegen')
#stream = ffmpeg.filter(stream, palette, 'paletteuse') ???
stream.output(dst).run()
Run Code Online (Sandbox Code Playgroud)

我检查过,如果我将其输出为 png,调色板会生成得很好。但是,我找不到如何通过多输入命令使用它paletteuse,因为过滤器仅将一个流作为 ffmpeg-python 的输入。我尝试将它们连接起来,ffmpeg.concat()这是我发现的从两个流中创建一个流的唯一方法,但我认为这是没有意义的(而且无论如何它都不起作用)。

任何想法?

python ffmpeg ffmpeg-python

3
推荐指数
1
解决办法
2495
查看次数

Postgresql 简单行级安全性 (RLS)

我正在努力解决基本的行级安全问题。

我首先尝试创建一个“租户”表,该表的每一行只能由租户本身看到,然后将类似的规则应用于引用租户主键的其他表。

我在策略中使用会话变量,并且还想从客户端强制执行租户 UUID(不是由服务器本身生成)。

所以首先我创建我的表:

CREATE TABLE tenants (
    tenant_id UUID,
    name text UNIQUE,
    PRIMARY KEY("tenant_id")
)
Run Code Online (Sandbox Code Playgroud)

然后我启用 RLS 和强制使用给定会话变量的策略:

ALTER TABLE tenants ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenants_isolation_policy ON tenants
        USING (tenant_id = current_setting('my.tenant')::UUID)
        WITH CHECK (tenant_id = current_setting('my.tenant')::UUID)
Run Code Online (Sandbox Code Playgroud)

然后我在表中插入 3 个条目tenants

INSERT INTO "tenants" ("tenant_id", "name") VALUES ('9c8e4f83-c036-4fcc-a775-228887d20851', 'Tenant 1');
INSERT INTO "tenants" ("tenant_id", "name") VALUES ('1953be83-683e-4960-a689-db8d53ba8cd2', 'Tenant 2');
INSERT INTO "tenants" ("tenant_id", "name") VALUES ('064767f7-9541-4492-9a7d-0466ac94e2ec', 'Tenant 3')
Run Code Online (Sandbox Code Playgroud)

然后我冒充租户1:

SET my.tenant = '9c8e4f83-c036-4fcc-a775-228887d20851'
Run Code Online (Sandbox Code Playgroud)

现在我希望如果我选择所有租户,结果应该只有一行。

然而,事实并非如此: …

postgresql row-level-security

3
推荐指数
1
解决办法
806
查看次数