小编use*_*904的帖子

我可以使用C/C++预处理器添加数字吗?

对于一些基地.基数1甚至.某种复杂的替代.

此外,当然,在现实生产代码中这样做并不是一个好主意.我只是出于好奇而被问到.

c c++ preprocessor metaprogramming

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

宣布主要原型

有什么理由我从未在C程序中看到main的原型声明,即:

int main(int argc, char* argv[]);

int main(int argc, char* argv[])
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎总是不一致..

c standards function-prototypes

13
推荐指数
2
解决办法
2万
查看次数

(git)diff输出相对路径?

我需要在我的仓库中获得一些与仓库基础无关的差异,而是相对于给定的基础或给定路径.

我默认得到:

git diff
diff --git a/path/to/file b/path/to/file
index 0cc125e..9bf911e 100644
--- a/path/to/file
+++ b/path/to/file
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

git diff --prefix=/new/path/to
diff --git a/new/path/to/file b/new/path/to/file
index 0cc125e..9bf911e 100644
--- a/new/path/to/file
+++ b/new/path/to/file
Run Code Online (Sandbox Code Playgroud)

我查看了--relative选项(不是我要找的), - src/dst-prefix(这些只能改变"a"或"b"部分.我错过了一些基本的东西吗?

git diff patch git-diff difference

11
推荐指数
2
解决办法
8389
查看次数

如何添加功能

我看了很多,但搜索没有很多噪音是一个难题.我想做这样的事情:

def f(arg):
  return arg * arg

def add(self, other):
  return self * other

f.__add__ = add

cubefunction = f + f
Run Code Online (Sandbox Code Playgroud)

但是我在对cubeto的赋值上遇到错误,例如:

TypeError: unsupported operand type(s) for +: 'function' and 'function'
Run Code Online (Sandbox Code Playgroud)

在python中是否没有函数代数可言,或者我只是犯了一个愚蠢的错误?

编辑:很久以后,我正在阅读Python的函数式编程正式介绍(http://docs.python.org/howto/functional.html),并在底部引用第三方软件包"functional"(http:// oakwinter.com/code/functional/documentation/),它可以组成功能,即:

>>> from functional import compose
>>> def add(a, b):
...     return a + b
...
>>> def double(a):
...     return 2 * a
...
>>> compose(double, add)(5, 6)
22
Run Code Online (Sandbox Code Playgroud)

python functional-programming operators

8
推荐指数
1
解决办法
1万
查看次数

是否可以fork/exec并保证一个在另一个之前启动?

就像标题所说的那样.我有一段代码如下:

pid_t = p;

p = fork();

if (p == 0) {
    childfn();
} else if (p > 0) {
    parentfn();
} else {
    // error
}
Run Code Online (Sandbox Code Playgroud)

我想确保父或子在另一个之前执行(但不返回)各自的功能.

像sleep()这样的调用可能会起作用,但是不能通过任何标准来保证,并且只是利用操作系统调度程序的实现细节......这可能吗?vfork会工作吗?

编辑:两个函数都找到了一个system()调用,其中一个函数在另一个函数启动之前不会返回.所以要重新迭代:我需要确保父或子只调用它们各自的函数(但不返回,因为它们不会,这是下面提供的所有基于互斥锁的解决方案提供的).有任何想法吗?抱歉缺乏清晰度.

edit2:有一个进程调用sched_yield和sleep,我似乎得到了非常可靠的结果.vfork确实提供了我正在寻找的语义,但是对于我在子进程中可以做的事情有很多限制(我几乎只能调用exec).所以,我发现了一些足够好的解决方案,但没有真正的解决方案.vfork可能是我所寻找的最接近的东西,但下面提出的所有解决方案都会或多或少地起作用.

c parallel-processing fork exec

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

混合shell和python脚本可能吗?

我发誓我以前见过这个,但现在找不到它.是否有可能让shell脚本启动python interpeter"mid stream",即:

#!/bin/bash
#shell stuff..

set +e

VAR=aabb

for i in a b c; do
    echo $i
done

# same file!

#!/usr/bin/env python
# python would be given this fd which has been seek'd to this point

import sys

print ("xyzzy")

sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

python linux shell

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

c ++函数映射实现

我一直在使用新的c ++标准中的可变参数模板,并提出了一个map函数(header +使用decs除外):

template<typename T>
T square(T i)
{
        return i * i;
}

template <typename T, typename... Ts>
const tuple<Ts...> map(const T f, const Ts...args)
{
        return make_tuple(f(args)...);
}

int main(int c, char *argv[])
{
        tuple<int, int> t;
        int (*fp) (int) = square;

        t = map(fp, 6, 8);

        cout <<get<0>(t) <<endl;
        cout <<get<1>(t) <<endl;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个有效.只要所有参数都是map的相同类型.如果我更改主要使用稍微更一般的形式:

 tuple<int, float> t;

 t = map(square, 6, 8.0f);
Run Code Online (Sandbox Code Playgroud)

gcc 4.4报告:

In function ‘int main(int, char**)’:
error: no matching function for call …
Run Code Online (Sandbox Code Playgroud)

c++ templates functional-programming map c++11

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

将unique_ptr从一个集合移到另一个集合

我似乎无法弄清楚,并尝试了以下建议:

在集合之间移动`unique_ptr`

如何将std :: unique_ptr <>从一个STL容器移动到另一个?

我有两个包含唯一指针的集合:

std::set<std::unique_ptr<some_type>> s1, s2;
Run Code Online (Sandbox Code Playgroud)

指针当然是唯一的,但是some_type的值可以是也可以不是,因此,在将s2连接到s1之后,s1的大小可以等于或等于| s1 + s2 |。

看来我应该能够做到这一点:

move(s2.begin(), s2.end(), inserter(s1, s1.end()));
Run Code Online (Sandbox Code Playgroud)

但这在clang ++ 3.8 / g ++ 5.4中失败。

这里缺少什么?

c++ stl c++11

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

Haskell foldWhile还是reduceWhile没有列表功能?

我正在寻找一种类似于"foldWhile"的haskell函数或模式,除了代替折叠它使用函数输出的列表.一些代码可能会更好地解释它.

简化和伪:

nums :: [Integer]
nums = [1]

cond :: v -> [Integer] -> Bool
cond v ls = elem v ls

func :: x -> ls -> [Integer]
func x ls = x `some_op` ls
Run Code Online (Sandbox Code Playgroud)

我需要一种应用模式,如:

(cond 1 num) && func x num -> num'
(cond 1 num') && func x num' -> num''
(cond 1 num'') && func x num'' -> num'''
...
Run Code Online (Sandbox Code Playgroud)

一旦cond返回False,就产生最后一个num.

任何帮助将不胜感激,提前谢谢.

algorithm haskell functional-programming

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

仅作为脚本运行时打印?

有没有更好的方法只在作为脚本运行时进行打印,何时__name__ == '__main__'

我有一些脚本,我也导入和使用的部分.

像下面这样的东西会起作用但是很难看,并且必须分别在每个脚本中定义:

def printif(s):
    if globals()['__name__'] == '__main__':
        print (s)
    return
Run Code Online (Sandbox Code Playgroud)

我简要介绍了一些python的日志库,但更喜欢两个更轻的解决方案......

编辑:

我最终做了这样的事情:

# mylog.py
import sys
import logging

log = logging.getLogger()

#default logging level
log.setLevel(logging.WARNING)

log.addHandler(logging.StreamHandler(sys.stdout))
Run Code Online (Sandbox Code Playgroud)

并从脚本:

import log from mylog

...
log.info(...)
log.warning(...)
...

if __name__ == '__main__':
    #override when script is run..
    log.setLevel(logger.INFO)
Run Code Online (Sandbox Code Playgroud)

此方案具有最少的代码重复,每个脚本日志级别和项目范围的默认级别......这正是我想要的.

python scripting logging

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