小编Spi*_*ill的帖子

专门化一项功能?

我想专门讨论两件事。一个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)

c++ templates c++23

4
推荐指数
2
解决办法
132
查看次数

当子进程终止时阻止父进程终止?

我想生成一个进程并使用 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)

c linux clone

0
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×1

c++ ×1

c++23 ×1

clone ×1

linux ×1

templates ×1