小编jdm*_*jdm的帖子

在stdin中使用linux“ cut”

我正在尝试将数据传递到“剪切”中,例如剪切掉文本的第一列。这有效

$ cat test.txt | cut -d\  -f2-
Run Code Online (Sandbox Code Playgroud)

从stdin读取也可以:

$ cut -d\  -f2- -
? doc/html/analysis.html
? doc/html/classxytree-members.html
<CTRL+D>
Run Code Online (Sandbox Code Playgroud)

但是,一旦涉及到管道,它就不再接受我<CTRL+D>,并且我也无法发出“文件结束”的信号:

$ cut -d\  -f2- - | xargs echo
Run Code Online (Sandbox Code Playgroud)

更新:这显然是旧版本bash(3.00.15)中的错误。它确实可以在较新的版本中运行(尝试4.0.33和3.2.25)。不过,最好有一些解决方法,因为我无法轻松升级。


背景:我有一个脚本/脚本,它以格式提供了我的压缩输出cvs status(我知道,CVS ...)

? filename
Run Code Online (Sandbox Code Playgroud)

例如,对于尚未提交的文件。我希望能够复制并粘贴该命令的输出部分,并将其用作另一个命令的输入,该命令会将这些文件添加到cvs。说:

$ cut -d\  -f2- | xargs cvs add
<paste lines>
<CTRL-D>        # <-- doesn't work
Run Code Online (Sandbox Code Playgroud)

有想法吗?

bash cut pipe

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

安装前编辑端口源

我的某个端口有问题。它编译安装好(port install webkit-gtk),实际问题出现在后面(某个符号没有编译到库中,但这里的细节无关紧要)。

为了调试和修复这个问题,我想在安装之前对 webkit-gtk 源进行一些更改。使用 apt-get,我可以做类似apt-get source packagename.

我发现我可以打电话

sudo port fetch webkit-gtk
sudo port extract webkit-gtk
sudo port patch webkit-gtk
sudo port configure webkit-gtk
Run Code Online (Sandbox Code Playgroud)

执行安装的各个步骤。但是,在对源进行更改后,我无法继续,因为我收到错误消息。我认为权限有问题,因为我只能以 root 身份编辑文件(自言自语会破坏构建过程,我不能su macports出于某种原因)。

我想做的是在配置步骤之前进行一些更改,然后像往常一样安装带有更改的端口。我怎样才能做到这一点?

macports

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

如何从字符串文字初始化unsigned char数组?

我有一个unsigned char[16]字段的结构,我想初始化为零.以下(强烈简化的)代码使用clang(OS X)编译良好:

struct GUID {
    unsigned char bytes[16];
    GUID() : bytes("\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0") {};
}
Run Code Online (Sandbox Code Playgroud)

注意我使用15 \0秒,因为16th是字符串文字的零终止符,如果你初始化一个字节太多的字符串,clang会抱怨.

现在,当我尝试使用GCC 4.5.3(cygwin)进行编译时,我得到:

error: incompatible types in assignment of 'const char [16]' to 'unsigned char [16]'
Run Code Online (Sandbox Code Playgroud)

为什么它不起作用,我怎样才能使它工作?(我显然可以在构造函数中遍历数组,但是如果可能的话我想使用初始化列表,并且我想了解它为什么在一个编译器中工作,而不是另一个编译器.)

c++ c-strings

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

随处替换一个python对象

如何在各处使用另一个对象替换python对象?

我有两个课,SimpleObjectFancyObject。我创建了一个SimpleObject,并且有多个引用。现在,我想创建一个FancyObject,并使所有这些引用都指向新对象。

a = SimpleObject()
some_list.append(a)
b = FancyObject()
Run Code Online (Sandbox Code Playgroud)

a = b不是我想要的,只是改变了要指向的内容。我阅读了以下内容,但没有用。我收到一个错误“属性__dict__不可写”:

a.__dict__ = b.__dict__
Run Code Online (Sandbox Code Playgroud)

我想要的是(pseudo-C)的等效项:

*a = *b
Run Code Online (Sandbox Code Playgroud)

我知道这很骇人,但是有什么办法可以做到这一点?

python python-2.7

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

阻止其他类的方法调用我的构造函数

如何使python"构造函数""私有",以便只能通过调用静态方法创建其类的对象?我知道Python中没有类似C++/Java的私有方法,但我正在寻找另一种方法来阻止其他人调用我的构造函数(或其他方法).

我有类似的东西:

class Response(object):
    @staticmethod
    def from_xml(source):
        ret = Response()
        # parse xml into ret            
        return ret

    @staticmethod
    def from_json(source):
        # parse json
        pass
Run Code Online (Sandbox Code Playgroud)

并希望以下行为:

r = Response() # should fail
r = Response.from_json(source) # should be allowed
Run Code Online (Sandbox Code Playgroud)

使用静态方法的原因是我总是忘记构造函数采用的参数 - 比如JSON或已经解析过的对象.即便如此,我有时会忘记静态方法并直接调用构造函数(更不用说使用我的代码的其他人).记录这份合同对我的遗忘无益.我宁愿用断言强制执行它.

与一些评论者相反,我认为这不是单一的 - "显性比隐性更好","应该只有一种方法".

当我做错时怎么能得到温柔的提醒?我更喜欢一个解决方案,我不需要更改静态方法,只需一个装饰器或构造函数的单行插件就可以了.一个la:

class Response(object):
    def __init__(self):
        assert not called_from_outside()
Run Code Online (Sandbox Code Playgroud)

python python-2.7

5
推荐指数
3
解决办法
4389
查看次数

挂钩在python中添加/删除列表中的项目

我想为python创建一个替代品list,这样我就可以知道添加或删除项目的时间.列表的子类或实现列表接口的东西也同样适用.我更喜欢一个解决方案,我不必重新实现列表的所有功能.有一种简单的+ pythonic方式吗?

伪代码:

class MyList(list):
    # ...
    def on_add(self, items):
        print "Added:"
        for i in items:
            print i

    # and the same for on_remove

l = MyList()
l += [1,2,3]
# etc.
Run Code Online (Sandbox Code Playgroud)

python list

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

__USE_XOPEN2K8的目的以及如何设置它?

我正在尝试编译gtk堆栈(最后一个gtk2版本,2.24),我得到了一堆似乎相关的错误.也就是说,__locale_t无法从string.h和time.h LC_ALL_MASK中找到它,也找不到(应该在locale.h中).

我发现所有这些问题都与__USE_XOPEN2K8#defined不相关.什么是__USE_XOPEN2K8,我怎样才能设置属性?

例如,我是否必须将标志传递给./configure以用于glib,gtk,...或者在构建gcc或glib c时是否必须更改某些内容?我不想只是#define __USE_XOPEN2K8在不知道它做什么的情况下撒到我的来源.注意我正在使用安装在非标准前缀中的gcc-4.6.3和glibc-2.16.0,因为我试图让gtk库在仅包含旧版本的旧版CentOS(5.8)上运行.

还要注意__locale_t在几个地方提到缺失,例如这个bug报告.我可以添加#include <xlocale.h>一些文件,但似乎正确的解决方案__USE_XOPEN2K8是设置.


编辑:我发现这个线程描述了这个问题.显然,主机系统的头文件被"fixincluded"放入新编译器的头文件中.链接的帖子建议编辑features.h.有谁知道我之后是否必须重新编译gcc/glibc(以及如何让它获取新的features.h,而不是覆盖它)?

gcc glibc

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

多态(继承)和值类型

我有一堆的类型,PixelMeasure,PointMeasure,CentimeterMeasure等等,这表示与一个单元的值.我希望他们有

  • 值语义:例如有效不可变,不必担心内存分配,以及
  • 多态性:我可以返回一个类型的对象,Measure并且可以对它进行操作,而不知道它是什么类型的.我还希望能够将多个不同的Measures放入容器中.

看来这些在C++中是互斥的.对于多态,我需要使用指针或引用.

我看到两个选择:

  • 使用智能指针,例如shared_ptr.这给了我想要的行为(安全,没有原始指针,但是多态调度).缺点是:
    • 它很冗长(如果我真的想要,我可以将它隐藏在typedef后面).
    • 你有内存分配(但代码不是性能关键,而是隐藏起来).
    • 语义很奇怪 - 我的对象(shared_ptr<PixelMeasure>)的副本将共享相同的底层指针.我仍然可以假装它具有值语义 - 如果我使接口不可变,那应该没关系.
  • 我想简单说一下不使用继承(没有共同的基类),并通过模板调度 - 但在这种情况下,我需要知道确切的措施那种在编译的时候,不能把它们放到容器中.
  • 我可以摆脱类的干脆只使用一个类,使用值和单位场 - 但是这将是少了很多灵活,使用语法会更糟糕,所以我宁愿避免这种情况.

有任何想法吗?

c++ polymorphism value-type

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

安全地检查`this`是否为空

首先,我知道在空指针上调用方法是未定义的行为.我也知道,因为这不应该发生,编译器可以(并且确实)假设this总是非空.

但在实际代码中,您有时会意外地执行此操作.通常,它没有任何不良影响,除了当然this在方法中为null,并且事情可能会崩溃.

作为一个调试辅助工具,并且本着崩溃早期的精神,我提出assert(this != 0)了一个方法,我之前曾经多次调用空指针.它似乎有效,但clang抱怨:

warning: 'this' pointer cannot be null in well-defined C++ code; comparison may be
      assumed to always evaluate to true [-Wtautological-undefined-compare]
    assert (this ! = 0);
            ^~~~     ~
Run Code Online (Sandbox Code Playgroud)

我想知道检测到的最佳(最不正确)方法this是什么.可以优化简单的比较.

  • 我可以做一些指针运算this来尝试欺骗编译器,或强制它将指针视为整数.
  • 我可以用memcmp.
  • 也许有特定于编译器的扩展来说"不要优化这个表达式"?

另外一个问题是,在继承的情况下,"null"这个指针可能实际上是类似的0x00000004,所以处理这种情况也会很好.我对Clang,MSVC或GCC的解决方案感兴趣.

c++ undefined-behavior

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

Win32应用程序中的丙烯酸材料

微软最近透露了他们的新“流畅”设计语言,其中一部分是“丙烯酸”材料。此效果使元素透明并模糊背景。可以将其应用于窗口,以使基础窗口的某些部分可以通过(背景丙烯酸)发光,也可以应用于窗口中的各个元素,以便其他控件可以通过(应用程序内的丙烯酸)发光。从概念和视觉上讲,它与macOS上的活力非常相似。

它在XAML中作为特殊的画笔实现,但我想知道是否可以在常规Win32应用程序中使用它(背景丙烯酸)吗?这种效果看起来与应用于开始菜单和任务栏的模糊效果(由SetWindowCompositionAttribute处理)非常相似,这使我相信可以通过类似的标记将其激活。

一个子问题:我想知道它是如何实现的?仅仅是可以在窗口上设置然后在DWM中应用的标志(例如SetWindowCompositionAttribute或Vista和7中的Aero Glass)吗?还是UWP可以控制DWM,并且可以设置着色器来控制其渲染方式?在Vista下,首次引入DWM时,它与WPF具有通用代码,并且实际上共享(类似于DirectX的)缓冲区和场景图,因此可以实现类似的技巧。magifier实用程序可以像矢量图像一样WPF应用程序急剧放大,但后来该功能丢失了。MS在该页面上显示“丙烯酸”的方式(作为不同的层,并实现为XAML画笔),使我认为您必须以某种方式将层注入DWM场景图中,这将使它变得更难或更不可能使用从Win32。

dwm uwp acrylic-material fluent-design

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