小编mat*_*scp的帖子

功能模板参数包不在参数列表的末尾

以下代码编译并运行正常.

void foo() {

}

template <typename T, typename... Args>
void foo(T x, Args... args) {
  cout << x << endl;
  foo(args...);
}

// inside main()
foo(1,1,1);
Run Code Online (Sandbox Code Playgroud)

这个其他代码不编译:

void foo() {

}

template <typename... Args, typename T>
void foo(Args... args, T x) {
  foo(args...);
  cout << x << endl;
}

// inside main()
foo(1,1,1);
Run Code Online (Sandbox Code Playgroud)

编译器说调用没有匹配函数,foo(1,1,1)并且说它foo(Args... args, T x)是候选函数,但模板参数推导/替换失败,因为候选者需要1个参数,但提供了3个参数.

这种情况是否存在任何编译器无法处理的歧义?这个编译错误对我来说似乎不合逻辑.也许这与C++标准有意无关?

c++ templates variadic-functions variadic-templates c++11

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

使用mkstemp()创建的文件被删除?

我有一个调用mkstemp()的程序,写了一些返回fd的东西,然后关闭fd.我希望文件保留,直到我自己删除它!使用rm命令等等.我的问题是:Linux会在关闭后删除此文件(fd)吗?

c linux temporary-files

6
推荐指数
1
解决办法
2829
查看次数

沙盒为在线评委

我开发了一个Linux应用程序,它运行从用户(参赛者)收到的不受信任的代码.更具体地说,该应用程序是一个在线评判,类似于UVa OJ,SPOJCodeforces,但主要是像BOCA在线竞赛管理员.我的OJ支持C,C++,Java和Python.

目前,我的OJ非常不安全,因为在运行不受信任的代码时没有沙盒.所以我正在寻找最好的方法.该解决方案的主要要求是:用户(正在设置比赛,而不是参赛者)必须花费尽可能少的努力来设置我的应用程序.我认为git clone repo,make,sudo make install,
pjudge install <contest_dir>,cd <contest_dir>,改变一些.txt文件,把秘密测试案例里面problems/,并pjudge start <port>已经太多了.

首先,考虑到chroot(2)/ 的解决方案,我宁愿让我的软件不安全而不是强迫用户设置根目录chroot(8).作为开发人员和用户,这个解决方案对我来说比我愿意接受这个个人项目更痛苦.

我还考虑了一个解决方案ptrace(2),如果它禁止系统调用,则终止该进程.我尝试了一些简单的代码来查看它是否有效,但它似乎对某些系统调用没有正常工作.另外,我想我必须过滤掉很多系统调用...而且我不知道系统调用JVM/Python运行时需要什么......我不确定这个解决方案是否可行.如果有人知道如何正确使用此解决方案,请帮助我!

我也找到了seccomp(2).这使得该方法只能够打电话read(2),write(2),_exit(2)sigreturn(2).这个解决方案似乎很棒 在我的应用程序中实现它很容易,它应该完全按照我的需要工作......但仅适用于C和C++.Java和Python又是一个问题.我不知道这个解决方案如何适用于后两种语言,考虑到我在源代码中使用fork(2)+ exec(2)/ system(3)(顺便说一句,这是在C++中).

任何帮助将非常感激.也许一些正确/有效的使用方式ptrace(2)/ seccomp(2),或者我缺少的其他一些解决方案.但是,请满足我唯一的要求!用户设置我的应用程序应该非常简单,简单和快速.

提前致谢!

linux ptrace sandbox seccomp

6
推荐指数
1
解决办法
719
查看次数

如何对用 C++ 编写的 NodeJS 本机插件进行 CPU 分析?

我用 C++ 为 NodeJS 编写了一个本机插件,现在我需要进行一些 CPU 分析。我尝试使用该--prof选项,但它只显示有关 v8 代码的分析信息,而不显示有关我的 C++ 代码的分析信息。我的 C++ 代码也在 NodeJS 使用的 libuv 线程池中运行,这是我需要 CPU 分析的最重要部分...我该怎么做?提前致谢!

c++ profiling node.js

6
推荐指数
0
解决办法
223
查看次数

终端仿真器和 TTY 设备之间有什么关系?

我发现这篇很棒的文字解释了很多有关 TTY 设备的内容。它重点关注 TTY 设备和 shell(及其衍生的作业)之间的关系。但它很少提及终端仿真器和 TTY 设备之间的关系;现在我想知道这一点。我用谷歌搜索,但找不到答案......

1)终端仿真器负责什么样的输入逻辑?它只是将每个字符代码(通过窗口事件接收)发送到 TTY 设备,还是在传输到 TTY 之前/期间进行更复杂的处理?这些字符代码是如何发送到TTY设备的呢?通过文件?

2) 前台进程调用write()TTY 设备文件(又名stdout/ )后stderr,会发生什么?这些数据如何到达终端仿真器进程并进行渲染?再次,通过文件?

3) 终端仿真器是否负责“分配”TTY 设备?TTY 设备可以由内核“即时”创建,或者内核可以管理的可用 TTY 设备数量是否有限?

linux tty terminal-emulator

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

MySQL:SELECT IF()语句中的SELECT

我能有这样的东西吗?

SELECT IF((SELECT COUNT(id) FROM table WHERE id = 1) = 0, 1, <nothing_to_happen>) AS Available
Run Code Online (Sandbox Code Playgroud)

我的目标是选择这个:

+---------+
|Available|
+---------+
|1        |
+---------+
Run Code Online (Sandbox Code Playgroud)

仅当此查询中未选择任何行时:

SELECT id FROM table WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

如果表中存在id = 1的行,我希望我的查询返回零行!那可能吗?

mysql sql select

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