小编orl*_*rlp的帖子

如何使用Tkinter的"原生"GUI外观?

默认情况下,Tkinter仍然使用旧的Windows 2000风格的小部件(随机示例):

Windows 2000运行对话框

但我想让它使用Windows XP/Vista/7风格的小部件:

windows xp运行对话框

我怎样才能做到这一点?我更喜欢使用最新款式,因此Windows 7> Vista> XP> 2000.

python windows tkinter

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

实现is_swappable以测试Swappable概念的正确方法是什么?

我认为"适当"的实现is_swappable如下:

template<class T, class U = T> struct is_swappable<T, U> : /* see below */ { }
Run Code Online (Sandbox Code Playgroud)

is_swappablestd::true_typeT和U 继承Swappable,否则从std::false_type.


我尝试了很多东西,但SFINAE似乎没有用.这是一个特别讨厌的反例:

struct A {
    A() {}
    ~A() {}
    A(const A&) = delete;
    A(A&&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

显然A不是Swappable.然而,我能提出的任何通用解决方案都无法正确处理上述示例.

我试过的SFINAE实现,但没有工作看起来像这样:

namespace with_std_swap {
    using std::swap;

    template<class T, class U, class =
        decltype(swap(std::declval<T&>(), std::declval<U&>()))>
    std::true_type swappable_test(int);

    template<class, class> std::false_type swappable_test(...);
}

template<class T, class U = T>
struct is_swappable
: decltype(with_std_swap::using_std_swap::swappable_test<T, …
Run Code Online (Sandbox Code Playgroud)

c++

15
推荐指数
1
解决办法
886
查看次数

正则表达式:boost :: xpressive vs boost :: regex

我想在C++中做一些正则表达式,所以我查看了interwebz(是的,我是C++的初学者/中级)并找到了这个SO答案.

我真的不知道在boost :: regex和boost :: xpressive之间做什么选择.有哪些优点/缺点?

我还读到与boost :: regex相对的boost :: xpressive是一个只有头的库.是不是很难在Linux和Windows上静态编译boost :: regex(我几乎总是编写跨平台应用程序)?

我也对编译时间的比较感兴趣.我有一个使用boost :: xpressive的当前实现,我对编译时间不太满意(但我没有与boost :: regex进行比较).

当然,我也对正则表达式实现的其他建议持开放态度.要求是免费的(如在啤酒中)并与http://nclabs.org/license.php兼容.

c++ regex boost boost-xpressive

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

制作JIT编译器

我写了一个像这样工作的Brainfuck实现(C++):

  1. 读取输入的brainfuck文件
  2. 做一些微不足道的优化
  3. 将brainfuck转换为VM的机器代码
  4. 在VM中执行此机器代码

这是非常快的,但现在瓶颈在于VM.它是用C++编写的,并且读取一个令牌,执行一个动作(如果你知道Brainfuck就不会有很多动作)等等.

我想要做的是剥离VM并动态生成本机机器代码(基本上是一个JIT编译器).这可以很容易地加速20倍.

这意味着步骤3将被JIT编译器替换,步骤4将被执行生成的机器代码.

我不知道从哪里开始,所以我有几个问题:

  1. 这是如何工作的,生成的机器代码如何执行?
  2. 是否有用于生成本机机器代码的C++库?

c++ jit brainfuck

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

Python csv writer错误的分隔符?

免责声明:我在欧洲.

根据此页面, Excel使用分号;作为欧洲的默认分隔符来"防止与小数点逗号冲突".

现在,我有这个Python代码:

import csv

data = [["test", "data"], ["foo", "bar"]]
writer = csv.writer(open("data.csv", "wb"), dialect="excel")
writer.writerows(data)
Run Code Online (Sandbox Code Playgroud)

哪个应生成此文件:

test;data
foo;bar
Run Code Online (Sandbox Code Playgroud)

但它使用逗号.为什么会这样?locale.getdefaultlocale()回报('nl_NL', 'cp1252').

python csv excel localization

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

如何为图形库编写测试?

我正在用Python编写OpenGL 2D库.一切都很顺利,代码库正在稳步增长.

现在我想编写单元测试,以便在修复其他/创建新功能时不会意外地引入新的错误.但我不知道这些如何适用于图形库.

我想到的一些事情:

  • 制作参考屏幕截图并将其与测试中自动生成的屏幕截图进行比较
  • 用日志语句替换opengl调用并比较日志

但两者似乎都是个坏主意.测试图形库的常用方法是什么?

graphics integration-testing unit-testing

12
推荐指数
1
解决办法
1664
查看次数

D编程语言是否使用增量垃圾收集器?

垃圾收集页面不指定d是否使用增量垃圾收集或停止的世界版本.它确实提到了暂停几次,这可能暗示了一个世界末日的垃圾收集器,但我不确定.

如果它不使用增量垃圾收集器,是否有任何特殊原因?一个停止世界的GC给交互式应用程序带来了困难.

garbage-collection d

12
推荐指数
1
解决办法
564
查看次数

Rust 中是否明确定义了分配之间的比较指针?

我有一个指向的元素buf: *const T分配开始的指针,并且定义了以下检查:nT

let in_alloc = buf <= ptr && ptr < unsafe { buf.add(n) };
Run Code Online (Sandbox Code Playgroud)

是否保证 是in_alloc的分配中的true任何一个,以及在任何其他情况下?我们可以假设是一个指向对象的有效指针(因此不是未对齐/空/悬挂),但是它可能来自也可能不是来自与 相同的分配。最后我们可以假设大小不为零。ptrbuffalseptrTbufT

pointers language-lawyer rust

12
推荐指数
1
解决办法
641
查看次数

语义迭代器声明?

对于非常模糊的标题我很抱歉,我真的不知道如何标题这个问题.

假设我有这个:

std::list<std::string> msgs;

for (std::list<std::string>::iterator it = msgs.begin(); it < msgs.end(); it++) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这很难读.这std::list<std::string>::iterator几乎看起来像一个神奇的数字,特别是如果声明msgs很远,就像在头文件中一样.IMO它会更容易阅读,如果它是这样的话更加语义:

std::list<std::string> msgs;

for (msgs.iterator it = msgs.begin(); it < msgs.end(); it++) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,这显然是非法的C++.但我的问题是,是否有一种方法可以实现支持编写像这样的迭代器声明的东西?

c++ iterator semantics

11
推荐指数
1
解决办法
3031
查看次数

如何禁用vim领导键的超时?

当我按下dvim时,我的状态行说d并无限期地等待进一步的指示.

当我按下我的领导(,对我来说)时,它等待输入一段时间然后超时.

如何禁用此功能,并使其无限期等待进一步说明?

vim

11
推荐指数
1
解决办法
5575
查看次数