小编fue*_*zig的帖子

模板化类函数T:如何判断T是否为指针?

作为这个问题的后续:我需要在这样的类函数中做出决定:

template< typename T > bool Class::Fun <T*> ( T& variable ) {...}
Run Code Online (Sandbox Code Playgroud)

T是否是指针.

在上面引用的问题中,答案是使用部分模板专业化.据我所知,这对于类功能是不可能的.这是真的?如果是这样,是否有另一种方法可以找出T是否为指针?

c++ templates type-traits

6
推荐指数
2
解决办法
1384
查看次数

如何使SVN ADD忽略二进制文件

二进制文件(在Linux下)没有扩展名,所以我不能使用模式排除它们.因此,当我SVN add用来添加目录时,我会得到类似的东西

$ svn add recursion_vector/
A         recursion_vector
A         recursion_vector/rec_vec.cxx
A         recursion_vector/rec_vec.h
A  (bin)  recursion_vector/rec_vec
Run Code Online (Sandbox Code Playgroud)

rec_vec是我想要排除的可执行文件.SVN显然将其视为二进制.现在我可以告诉Subversion忽略所有二进制文件吗?

svn directory binary ignore add

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

使用Python中的工作池进行异步多处理:如何在超时后继续运行?

我想使用一个进程池运行一些作业并应用一个给定的超时,之后应该杀死一个作业,并替换另一个处理下一个任务的作业.

我试图使用multiprocessing模块提供一种方法来异步运行工作池(例如使用map_async),但在那里我只能设置一个"全局"超时,之后所有进程都将被终止.

是否有可能有一个单独的超时,之后只有一个耗时太长的进程被杀死,而一个新的worker再次被添加到池中(处理下一个任务并跳过超时的那个)?

这是一个简单的例子来说明我的问题:

def Check(n):
  import time
  if n % 2 == 0: # select some (arbitrary) subset of processes
    print "%d timeout" % n
    while 1:
      # loop forever to simulate some process getting stuck
      pass
  print "%d done" % n
  return 0

from multiprocessing import Pool
pool = Pool(processes=4)
result = pool.map_async(Check, range(10))
print result.get(timeout=1)    
Run Code Online (Sandbox Code Playgroud)

超时后,所有工人都被杀死,程序退出.我想继续下一个子任务.我是否必须自己实施此行为或是否存在现有解决方案?

更新

可以杀死悬挂的工人并自动更换.所以我提出了这个代码:

jobs = pool.map_async(Check, range(10))
while 1:
  try:
    print "Waiting …
Run Code Online (Sandbox Code Playgroud)

python timeout multiprocessing worker-pool

6
推荐指数
2
解决办法
8833
查看次数

OpenCV:将Scalar转换为不同的颜色空间

我用a Scalar来定义我正在绘制的矩形的颜色OpenCV:

rectangle(imgOriginal, Point(0, 0), Point(25, 50), Scalar(H, S, V), CV_FILLED);
Run Code Online (Sandbox Code Playgroud)

但是,颜色是在HSV颜色空间而不是RGB(imgOriginalRGB)中定义的.

如何转换Scalar(或它的输入,整数变量H,SV)为RGB?

(到目前为止,我只找到了答案,告诉我如何转换整个图像,cvtColor而不是我想要的.)

c++ opencv color-space

6
推荐指数
2
解决办法
5816
查看次数

LaTeX Beamer:使用带有挤压选项的 \againframe

当我写的时候:

\begin{frame}[label=foo,squeeze]
...
\end{frame}
Run Code Online (Sandbox Code Playgroud)

并稍后用于\againframe{foo}重复帧,重复帧上的内容不会被“挤压”(在我的情况下太长而无法适合幻灯片)。

我如何\againframe与该squeeze选项结合?

latex beamer

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

Swig:如何包装 double&amp;(通过引用双重传递)?

我正在使用 SWIG 从 Python 访问 C++ 代码。我如何优雅地包装一个函数,该函数在通过引用传递的变量中返回值,例如

void set(double&a) {
  a = 42.;
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何做到这一点。在最好的情况下,我可以在 Python 中使用带有 Python 浮点数的函数:

>>> b = 2.
>>> set(b)
>>> print b
42.0
Run Code Online (Sandbox Code Playgroud)

目前它给了我一个TypeError: in method 'TestDouble_set', argument 2 of type 'double &'.

c++ python double swig pass-by-reference

5
推荐指数
2
解决办法
6835
查看次数

bash:以块为单位处理文件列表

那个设定:

我有几百文件,名字类似input0.datinput1.dat..., input150.dat,我需要使用一些命令来处理cmd(这基本上合并所有文件的内容)。在cmd需要作为第一选择输出文件名,然后所有的输入文件名列表:

./cmd output.dat input1.dat input2.dat [...] input150.dat
Run Code Online (Sandbox Code Playgroud)

问题:

问题是由于内存问题,脚本只能处理10个左右的文件(不要怪我)。因此,不要bash像这样使用通配符扩展名

./cmd output.dat *dat
Run Code Online (Sandbox Code Playgroud)

我需要做类似的事情

./cmd temp_output0.dat file0.dat file1.dat [...] file9.dat
[...]
./cmd temp_outputN.dat fileN0.dat fileN1.dat [...] fileN9.dat
Run Code Online (Sandbox Code Playgroud)

之后,我可以合并临时输出。

./cmd output.dat output0.dat [...] outputN.dat
Run Code Online (Sandbox Code Playgroud)

如何有效地编写脚本bash

我尝试过但没有成功,例如

for filename in `echo *dat | xargs -n 3`; do [...]; done
Run Code Online (Sandbox Code Playgroud)

问题在于这会再次处理所有文件,因为xargsget 的输出行是连接在一起的。

编辑:请注意,我在调用cmd!时需要指定输出文件名作为第一个命令行参数。

bash shell batch-processing

5
推荐指数
2
解决办法
2103
查看次数

为什么(无限)递归在 clang(和 gcc/g++)中使用 和 w/o -O3 会给出不同的结果?

当我编译并运行此代码时

#include <stdio.h>

int collatz(int a) {
    return a == 1 ? 1 : collatz((a%2) ? 3*a+1 : a/2);
}

int main() {
    for (int a = 0; a < 10; ++a)
        printf("%d: %d\n", a, collatz(a));
}
Run Code Online (Sandbox Code Playgroud)

clang(10.0.0-4ubuntu1)中它崩溃了,但是当我添加-O3它时它运行良好。(当将此作为 C 或 C++ 代码传递给clang.)

我知道它在没有优化标志的情况下崩溃,因为collatzwith的调用0将导致无限递归。但是,随着-O3它返回0: 1,这是错误的。这是优化中的(已知)错误还是我遗漏了什么?

gcc/ g++(9.3.0) 不优化也崩溃,编译挂起-O3。)

编辑:只是补充一点,我不是在寻找程序挂起/失败的原因(这很清楚),而是为什么编译器显然可以自由返回一些值而程序不应返回(但进入无限循环)。

编辑 2:为什么我没有选择一个更小的例子?嗯,在这里,这给出了相同的行为

int divide(int i) {
  return i == 1 ? …
Run Code Online (Sandbox Code Playgroud)

c c++ clang compiler-optimization

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

是否有像 std::max_element 这样的算法来计算第二大元素?

标准库提供了std::max_element查找可迭代中最大元素的功能,例如:

std::vector<float>::const_iterator max = 
  std::max_element(obj.pt()->begin(), obj.pt()->end());
return std::distance(obj.pt()->begin(), max);
Run Code Online (Sandbox Code Playgroud)

还有什么可以获取第 n 大元素的迭代器吗?

(请注意,max_element返回一个迭代器,这实际上很重要:我不是在寻找值本身,而是在可迭代中寻找第 n 个最大元素的位置。)

c++ algorithm std max

4
推荐指数
1
解决办法
6831
查看次数

在Python中访问父类的静态类变量

我喜欢这样的

class A:
  __a = 0
  def __init__(self):
    A.__a = A.__a + 1
  def a(self):
    return A.__a

class B(A):
  def __init__(self):
    # how can I access / modify A.__a here?
    A.__a = A.__a + 1 # does not work
  def a(self):
    return A.__a
Run Code Online (Sandbox Code Playgroud)

我可以访问__a类变量B吗?这可能是写作a而不是__a,这是唯一的方法吗?(我猜答案可能很短:是的:)

python inheritance class static-variables

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