小编Kos*_*Kos的帖子

C++中的方法解析顺序

考虑以下类层次结构:

  • 基类使用虚方法foo()的对象
  • 具有多重继承的任意层次结构(虚拟和非虚拟); 每个类都是Object的子类型; 其中一些覆盖了foo(),有些则没有
  • 来自此层次结构的类X,不覆盖foo()

如何确定在C++中对类X的对象调用foo()时将执行哪个方法?

(我正在寻找算法,而不是任何特定情况.)

c++ multiple-inheritance virtual-inheritance method-resolution-order

10
推荐指数
1
解决办法
4051
查看次数

Git - 自动为冲突版本创建不同的文件

当Git在合并期间检测到冲突时,默认行为是使用<<< >>> ===标记填充文件.

这在大多数情况下都可以,但有时候我想以不同的方式解决冲突,我只想让Git创建不同的文件:

  • 原始版本,
  • 改变版本A,
  • 更改版本B.

怎么实现呢?


如果没有简单的命令一次性创建这些文件(这有点令人惊讶),也许有一种方法来扩展Git以便它可以做到这一点?习俗mergetool还是什么?只是一个想法.


解:

我已经找到了@Karl Bielefeldt的答案:

savefiles.sh

#!bash
BASE=$1
LOCAL=$2
REMOTE=$3
MERGED=$4

cp "$BASE" "$MERGED.git_BASE"
cp "$LOCAL" "$MERGED.git_LOCAL"
cp "$REMOTE" "$MERGED.git_REMOTE"

# never mark the conflict as merged
exit 1 
Run Code Online (Sandbox Code Playgroud)

配置

mergetool.savefiles.cmd=/path/to/savefiles.sh $BASE $LOCAL $REMOTE $MERGED
mergetool.savefiles.trustexitcode=true
Run Code Online (Sandbox Code Playgroud)

git version-control merge-conflict-resolution

10
推荐指数
2
解决办法
1271
查看次数

如何向用户报告标准例外?

考虑一个C#GUI应用程序,它使用a FileStream来读取用户通过"打开文件"对话框选择的文件.

如果读取因其中一个例外而失败,那么以用户友好的方式向用户报告失败的正确方法是什么?

我应该为每个例外发明我自己的消息,还是有办法获得一个我可以逐字呈现给用户的本地化,用户友好的消息?

编辑

我问的是.NET本身是否能够为我提供一个我可以呈现的描述性字符串(这与其他.NET程序一致).我知道我可以卷起自己的,但如果有标准的选择,我想避免这种情况.

c# usability localization exception

10
推荐指数
1
解决办法
671
查看次数

在Django REST框架中将不在模型中的字段添加到序列化程序中

我有一个模型注释,创建时可能会也可能不会创建新用户.因此,我的API在创建新评论时需要密码字段.这是我的评论模型:

class Comment(models.Model):
    commenter = models.ManyToManyField(Commenter)
    email = models.EmailField(max_length=100)
    author = models.CharField(max_length=100)
    url = models.URLField(max_length=200)
    content = models.TextField(blank=True, null=True)
    ip = models.IPAddressField(max_length=45)
    date = models.DateTimeField(default=datetime.now)
    post_title = models.CharField(max_length=200)
    post_url = models.URLField(max_length=200)
    rating = models.IntegerField(max_length=10, default=0)
Run Code Online (Sandbox Code Playgroud)

这是我的API视图:

class CommentNewView(CreateAPIView):
    model = Comment
    serializer_class = CommentCreateSerializer
Run Code Online (Sandbox Code Playgroud)

这是我的序列化器:

class CommentCreateSerializer(serializers.ModelSerializer):
    commenter_pw = serializers.CharField(max_length=32, required=False)

    class Meta:
        model = Comment
        fields = ('email', 'author', 'url', 'content', 'ip', 'post_title', 'post_url', 'commenter_pw')
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/api/comment/create/

Django Version: 1.5.2
Python Version: 2.7.2 …
Run Code Online (Sandbox Code Playgroud)

python api django rest django-rest-framework

10
推荐指数
2
解决办法
9969
查看次数

如何修复Go测试输出中的行号?

让我们考虑一下这个简单的测试代码.

(注意:assertSomething这里非常简单,但通常我会为手头的任务编写一个更专业的帮助程序,它会查看多个内容并报告多种类型的错误.)

package hello

import "testing"

func TestFoo(t *testing.T) {
    assertSomething(t, 2+2 == 4) // line 6
    assertSomething(t, 2+3 == 6) // line 7
}

func assertSomething(t *testing.T, expected bool) {
    if !expected {
        t.Error("Something's not right") // line 12
    }
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时go test,我得到以下内容:

--- FAIL: TestFoo (0.00s)
    hello.go:12: Something's not right
FAIL
exit status 1
FAIL    kos/hello   0.008s
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1)错误指向第12行 - 为什么?如何t.Error找出它的调用方式?

2)在帮助程序中,我想指定t.Error应该查看堆栈级别更高以确定要打印的行号,以便我得到这样的消息:

--- FAIL: TestFoo (0.00s)
    hello.go:7: Something's not right …
Run Code Online (Sandbox Code Playgroud)

testing go

10
推荐指数
2
解决办法
1269
查看次数

OpenGL 3,OpenGL 4实现中的已知错误

正如我们最终都知道的那样,规范是一回事,而实现则是另一回事.我们自己造成的大多数错误,但有时并非如此.

我相信制作一个小清单是有用的:

GPU驱动程序中目前已知的错误是什么,与最近版本的OpenGL和GLSL的实现有关?

请记得始终发布相关的显卡驱动程序版本.

opengl drivers glsl opengl-3

9
推荐指数
1
解决办法
1958
查看次数

为空间优化一系列tribools

让我先从一些背景知识开始:

通过"tribool"我理解一个可以包含以下值之一的变量:true,falsenull.

问题是复制int的数组与指向 bool的指针,OP希望有一个尽可能小的tribools数组(或多或少).

使用"一点点"最基本的bit-fu,我提出了一个解决方案,每个tribool使用2位,并允许以16个字节存储OP的64个tribool数组,这是可以的.

我使用的tribool机制非常简单,如:

  • boolean A表示"null或not null",
  • boolean B表示"如果不为null则为true或false".

但后来我想......"比特"的算法定义是:

是指定其中两个同样可能的事件应发生的信息量.

显然,真/假值是1位大.两个真假值整体上是2位大.

那么我们的概念摩擦呢呢?

我的观点是:就所包含信息的大小而言,tribool大于1位但小于2位.

  • 理由1:假设我们实现了如上所述的if boolean.如果布尔A为"null",则布尔值B的值是多余的,并且不携带任何相关信息.
  • 理由2:在一个tribool中存储来自2个独立布尔值的信息是不可能的,因此它具有

(以上都不是正式的证据,但我相信我们可以同意关于tribool的"大小"严格大于1位且严格小于2.)


我的问题是:

如何以编程方式利用tribool信息少于2位的事实,并在软件(c,c ++?)中实现一个N tribool数组,其内存占用量小于N/4某些N的字节数?

是的,我确实理解这样的实现并不是真正的硬件友好,并且执行速度比任何具有冗余的常见解决方案都要慢(如OP的问题所示).让我们优化空间,而不是效率.

显然,这种实现需要一种摩博尔的不同表示而不是一对bool(这本身就是多余的,如前所述).该理论认为可以实现这一目标,我希望看到实际的实施.有任何想法吗?

c c++ optimization bit-manipulation

9
推荐指数
1
解决办法
435
查看次数

从应用程序在运行时读取调试信息

我有一些关于调试符号的问题以及可以用它们做什么,以及调试.我最感兴趣的是有关GCC的答案,但我也很高兴知道它在其他编译器(包括MSVC)下的样子.

首先:

  • 调试符号的常见格式/类型有哪些?
  • 它们如何与编译器和平台相关?GCC和MinGW在平台上的格式是否一样?
  • 我可以在运行时检查构建是否包含它们以及它们的格式是什么?

还有一些更实际的问题...... 我怎么能:

  • 检查当前文件和行号?
  • 获取正在执行的(合格)函数名称?
  • 获得完整的当前堆栈跟踪?

我要强调一点,我说的是运行时检查.所有这些都可以通过GDB读取和漂亮打印,但我不知道调试符号本身有多少信息以及GDB也可以访问的源代码中有多少信息.

也许有一个库能够解析调试符号并产生这样的信息?

调试符号的标准化是否足够好以至于我可以期待这种解决方案的某种程度的可移植性?

c c++ logging gdb debug-symbols

9
推荐指数
1
解决办法
2309
查看次数

双向将"虚拟"字符串列表绑定到列

我有一个字符串列表.

好吧,从概念上讲.它们存储在其他地方,但我想提供一个对象,它就像一个列表(并提供任何必要的事件),具有我可以绑定的属性.

我想在这个数据上建立一个双向绑定,将其显示为一个可修改的列DataGrid.我有以下问题:

  • 我不能进行双向绑定,因为绑定需要一个路径(即我不能让它看起来像{Binding}{Binding Path=.}在列中,{Binding Path=someField"}如果我做对了,必须要修改,这听起来很合理).
  • 我不完全知道代理集合对象应该是什么样的,在接口方面(会IEnumerable+ INotifyCollectionChanged足够吗?)

是否有任何解决方案不涉及为集合中的每个String创建一个代理对象?你能建议一个有效的设计吗?


为了让讨论保持在轨道上,让我们假设我想绑定到这样的东西:

class Source {
    public String getRow(int n);
    public void setRow(int n, String s);
    public int getCount();
    public void addRow(int position, String s);
    public void removeRow(int position);
}
Run Code Online (Sandbox Code Playgroud)

这不完全是我的情况,但当我知道如何绑定到这个时,我想我将能够处理这样的任何情况.

我可以在该Source之上提供一个适配器对象,包含任何必要的接口和事件,但我不希望每行数据都有一个适配器对象.

.net c# data-binding wpf binding

9
推荐指数
1
解决办法
716
查看次数

当两个args都为null时,C#是Equals()的简写

一个简单的问题:

我想使用虚拟Equals()方法比较两个对象(不是==).两者都可以为空.

我应该重复一下这句话:

if ((left == null && right == null) || (left != null && left.Equals(right)) {

}
Run Code Online (Sandbox Code Playgroud)

或者这种情况有更优雅的习语吗?

c# null equals

9
推荐指数
1
解决办法
502
查看次数