我想专门讨论两件事。一个int, 以及任何类型的指针。int但现在让我们坚持下去。
在下面的代码中, ifT是 an int,我想要一个Test::a()返回 0 的不同实现。我尝试过:
template<>
int a() { return 0; }
Run Code Online (Sandbox Code Playgroud)
但这显然是错误的,因为我收到一个编译错误,表明我写的内容毫无意义。
我有办法做到这一点吗?Test如果我想做这样的事情,我需要专注于所有事情吗?
我真正的类有几百行,所以如果可能的话,我宁愿只重新实现一两个函数。
template<class T>
class Test{
T*t;
public:
Test(T*t) : t(t) {}
T a() { return 1; }
T b() { return 2; }
//if T == int
//int a() { return 0; }
};
int main(int argc, char *argv[])
{
Test<int> t(0);
return t.a();
}
Run Code Online (Sandbox Code Playgroud) 我想生成一个进程并使用 stdin/out 与其进行通信。这一切都有效,但我注意到当孩子通过信号终止时,父母也会这样做。下面是一个例子。如果取消注释 true,程序将打印“完成”。如果您编译并取消注释 selfterm,则它不会,并且父进程将终止并退出代码 137。为什么父进程会终止以及如何阻止它?
主程序
#include <signal.h>
#include <sched.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int doexec(void*) {
//char*bin = "/usr/bin/true";
//char*bin = "/tmp/selfterm";
char*args[] = {bin, 0};
int err = execv(bin, args);
return err;
}
int main(int argc, char *argv[]) {
int pid = clone(doexec, malloc(2*1024*1024)+2*1024*1024, CLONE_VFORK|SIGCHLD, 0);
int status=0;
wait(&status);
puts("Finish");
}
Run Code Online (Sandbox Code Playgroud)
selfterm.c
#include<signal.h>
int main(int argc, char *argv[]) { kill(0, 9); }
Run Code Online (Sandbox Code Playgroud)