小编jok*_*aut的帖子

如何初始化静态模板化容器?

我试图找出初始化模板值为私有内部类的静态容器变量的正确方法.这是一个玩具的例子

#include <vector>

using namespace std;

template <class myType>
class Foo {
private:
    class Bar {
        int x;
    };

    static vector<Bar*> bars;
};

template <class myType>
vector<Bar*> Foo<myType>::bars; // error C2065: 'Bar' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

我也试过了

...

template <class myType>
vector<Foo<myType>::Bar*> Foo<myType>::bars; // error C2059: syntax error : '>'
Run Code Online (Sandbox Code Playgroud)

它是有效的,如果在设计class Bar之外声明,class Foo但从设计的角度来看,这是一个丑陋的解决方案.有什么建议?

仅供参考,一切都在.h文件中声明.

c++ static templates nested class

7
推荐指数
1
解决办法
687
查看次数

带有非模板库的模板类给出了LNK2005错误

我有一个模板化的类Child,它继承自非模板化的Parent类.当我在多个.cpp文件中包含Child的标头时,我收到LNK2005错误.发生这种情况是因为Parent在多个编译单元中定义.当这些单元链接在一起时,它们会导致LNK2005错误.

如果你想知道的目的,父母是给孩子的都是一个静态变量实例,而不是只为每个儿童<""类型""> .

我的问题是,如何创建一个模板化的类,它具有唯一的(跨所有实例)静态变量,并且可以包含在多个.cpp文件中?

这是一个导致LNK2005错误的玩具示例:

main.cpp中

#include "Apple.h"
#include "Banana.h"

#include <string>

void main() {
    Apple apple;
    Banana banana;
}
Run Code Online (Sandbox Code Playgroud)

Apple.h

#ifndef APPLE_H
#define APPLE_H

struct Apple {
    Apple();
};

#endif // APPLE_H
Run Code Online (Sandbox Code Playgroud)

Apple.cpp

#include "Apple.h"
#include "Child.h"

Apple::Apple() {
    Child<int> child;
    child.foo(5);
}
Run Code Online (Sandbox Code Playgroud)

Banana.h

#ifndef BANANA_H
#define BANANA_H

struct Banana {
    Banana();
};

#endif // BANANA_H
Run Code Online (Sandbox Code Playgroud)

Banana.cpp

#include "Banana.h"
#include "Child.h"

Banana::Banana() …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates lnk2005

2
推荐指数
1
解决办法
1983
查看次数

在Solaris上使用Python杀死进程的问题

我有一个名为C的C++程序,用于在收到SIGINT信号时关闭.我编写了一个Python程序P,它将C作为子进程运行.我想P停止Ç.我尝试了3件事,我想知道为什么有些东西不起作用.

尝试#1:

import subprocess
import signal
import os

p = subprocess.Popen(...)
...
os.killpg(p.pid, signal.SIGINT)
Run Code Online (Sandbox Code Playgroud)

这段代码给了我错误

OSError [Errno 3]:没有这样的过程`

即使p.pid匹配pid显示ps.

尝试#2:

import subprocess
import signal
import os

p = subprocess.Popen(...)
...
os.system('kill -SIGINT %u' % p.pid)
Run Code Online (Sandbox Code Playgroud)

这给了我错误

sh:kill:坏信号

即使kill -SIGINT <pid>从终端工作.

尝试#3:

import subprocess
import signal
import os

p = subprocess.Popen(...)
...
os.system('kill -2 %u' % p.pid)
Run Code Online (Sandbox Code Playgroud)

这有效.

我的问题是,为什么#1和#2不起作用?


编辑:我最初的假设是,自从文档os.kill()New …

python solaris kill

2
推荐指数
1
解决办法
2262
查看次数

标签 统计

c++ ×2

templates ×2

class ×1

inheritance ×1

kill ×1

lnk2005 ×1

nested ×1

python ×1

solaris ×1

static ×1