我刚刚在这里阅读了一个有趣的问题,让我想到了另外两件事:
void *
或是否持有更丰富的信息(如返回类型,论点和论据类型的号码?)VSCode 是否可以显示一系列行的 git 历史记录?
假设我有 1000 个与此文件相关的提交,并且此文件中的一系列行在提交 24 上进行了最后更改,我必须在编辑器中检查 976 个提交。
我在这里看到了一些相关内容,但是可以直接在IDE中吗?
我在使用 Google 测试时遇到问题。我有一个相当于以下内容的代码:
template<int N> class A {
public:
A() {}
A(int n) {
var = n;
}
int var;
};
Run Code Online (Sandbox Code Playgroud)
#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 …
考虑具有相同效果的 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,我不确定。你能帮我吗?
让我们假设我声明了一个模板化的结构:
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>
,无论代码中的模板专业化顺序是什么?
如果我有以下嵌套类:
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
嵌套类中的关键字是否指向层次结构中上游的所有类?
我想用 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()
这是我发现的从两个流中创建一个流的唯一方法,但我认为这是没有意义的(而且无论如何它都不起作用)。
任何想法?
我正在努力解决基本的行级安全问题。
我首先尝试创建一个“租户”表,该表的每一行只能由租户本身看到,然后将类似的规则应用于引用租户主键的其他表。
我在策略中使用会话变量,并且还想从客户端强制执行租户 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)
现在我希望如果我选择所有租户,结果应该只有一行。
然而,事实并非如此: …
c++ ×4
templates ×2
c ×1
c++11 ×1
class ×1
compilation ×1
ffmpeg ×1
git-blame ×1
googletest ×1
nested ×1
pointers ×1
postgresql ×1
python ×1
this ×1