小编Unc*_*eiv的帖子

如果在派生类中覆盖此属性,如何调用基类的属性?

我正在改变我的一些类别,从广泛使用吸气剂和制定者到更加诡计多端的财产使用.

但现在我被卡住了,因为我之前的一些getter或setter会调用基类的相应方法,然后执行其他操作.但是如何通过属性实现这一目标呢?如何在父类中调用属性getter或setter?

当然,只调用属性本身就会产生无限递归.

class Foo(object):

    @property
    def bar(self):
        return 5

    @bar.setter
    def bar(self, a):
        print a

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return self.bar # --> recursion!

    @bar.setter
    def bar(self, c):
        # perform the same action
        # as in the base class
        self.bar = c    # --> recursion!
        # then do something else
        print 'something else'

fb = FooBar()
fb.bar = 7
Run Code Online (Sandbox Code Playgroud)

python inheritance overloading properties descriptor

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

如何对模板代码的故意编译错误进行单元测试

请注意,这不是如何编写单元测试来验证编译错误?因为我不关心测试外部库或编译器本身的正确性.

它在C++中是典型的,特别是在处理模板时,采用阻止某些特定代码编译的技术.由于这些问题可能会变得复杂,确保特定代码片确实会产生编译器错误的最佳方法是什么?

由于测试甚至不应该编译,你不能依赖诸如东西,所以我想它应该集成在构建系统中?这些问题通常如何处理?

c++ templates unit-testing

39
推荐指数
2
解决办法
4277
查看次数

有没有替代ctags更好的?

我刚刚发现了vim的taglist插件,并阅读了如何将它与ctags一起使用.

然而,令人失望的是ctags是一个非常简单的解析器.

有没有更完整的替代方案?

具体来说,我正在寻找一些东西:

  • 扩展#define(x, y) x ## y函数声明的样式宏

  • 处理#include陈述

  • 允许为依赖项指定包含路径

我看到clang提供了一个用于访问c AST的程序api,所以这肯定不是很难吗?

有人已经做过吗?

-

编辑:

这些不削减它:

  • clang_indexer - 不编译; 什么时候(黑客攻击后),不起作用(无休止的错误).

  • clang_complete - 似乎没有比ctags好.没有特定于上下文的建议,没有结构完成,没有函数参数,没有宏扩展; 只是一个符号列表和它们来自的文件.

vim ctags

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

GLSL中的printf?

在C中,我可以调试代码:

fprintf(stderr, "blah: %f", some_var);
Run Code Online (Sandbox Code Playgroud)

在GLSL中......无论如何我只是在Vertex或Fragment着色器中转储一个值?我不在乎它是否缓慢; 我只想转出价值.理想情况下,我想要一个如下设置:

  • normal state =正常运行GLSL着色器
  • 按键'd'=在ULTRA慢速模式下生成下一帧,其中Vertex/Fragment着色器中的"printfs"被执行并转出.

这可行吗?(我不关心性能;我只是想为一帧做这个).

谢谢!

glsl

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

C++ STL map我不想让它排序!

这是我的代码

map<string,int> persons;

persons["B"] = 123;
persons["A"] = 321;


for(map<string,int>::iterator i = persons.begin();
    i!=persons.end();
    ++i)
{
    cout<< (*i).first << ":"<<(*i).second<<endl;
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

  B:123
  A:321
Run Code Online (Sandbox Code Playgroud)

但它给出的输出是:

  A:321
  B:123
Run Code Online (Sandbox Code Playgroud)

我希望它保持键中插入键和值的顺序map<string,int>.

可能吗?或者我应该使用其他一些STL数据结构?哪一个?

c++ stl

23
推荐指数
4
解决办法
3万
查看次数

从vim更新cscope db

我使用带有vim的cscope.对多个文件进行大量编辑时,cscope将报告已更改文件的旧行号.如何从vim重建cscope db而不会丢失

  • 在vim中打开标签/窗口
  • 与cscope引擎连接

谢谢

vim cscope

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

线端不可知差异?

我正在使用一些相当旧的文件.不同的程序创建了不同的文件,因此其中一些以\ r(mac)结尾,一些以\n(unix)结尾.我希望能够在这些文件上运行diff,grep等命令,但将\ r \n的命令视为一个巨行.有没有人知道一个版本的diff,grep等可以正常使用所有新行?

ETA:我也希望它们是unix实用程序,所以我可以在脚本,emacs等中使用它们......

unix macos diff utilities

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

如何判断哪个远程svn分支是本地git分支跟踪?

我对如何从不同的本地git分支提交几个svn分支感到困惑.特别是,尽管我已经阅读了很多关于这个主题的相关问题,但到目前为止还没有人能解释过一个具体的问题:

如果我已经有一些本地分支,我如何判断他们正在跟踪哪个远程svn分支(如果有的话)?

这个答案看来,您可以更改要跟踪的分支,但如何查询它?

git branch -v在这方面似乎没有特别的帮助(即没有给出额外的信息).我也查看了所有文本文件,.git/但也找不到任何内容.

git git-svn remote-branch

16
推荐指数
1
解决办法
3622
查看次数

使用boost :: python将C++类实例传递给python

我有一个库创建对象(类A的实例)并将它们传递给python程序,该程序应该能够调用它们的方法.

基本上我有C++类实例,我想从python中使用它们.有时,该对象应该传递回C++进行一些操作.

我创建了以下包装器文件(假设该New函数在C++代码中的某处调用):

#include <boost/python.hpp>
#include <iostream>
#include <boost/smart_ptr.hpp>

using namespace boost;
using namespace boost::python;

int calls = 0;

struct A
{
   int f() { return calls++; }
   ~A() { std::cout << "destroyed\n"; }
};

shared_ptr<A> existing_instance;

void New() { existing_instance = shared_ptr<A>( new A() ); }

int Count( shared_ptr<A> a ) { return a.use_count(); }

BOOST_PYTHON_MODULE(libp)
{
    class_<A>("A")
        .def("f", &A::f)
    ;

    def("Count", &Count);

    register_ptr_to_python< shared_ptr<A> >();
} 
Run Code Online (Sandbox Code Playgroud)

代码缺少python获取的部分existing_instance.我没有粘贴它,但我只是说我为此目的使用回调机制.

这段代码有效,但我有几个问题:

  1. 在Count函数(以及所有其他C++操作函数中)可以这样传递a或者更好地做类似的事情const shared_ptr<A>&吗?在我在python …

c++ python boost boost-python

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

SCons代码生成和VariantDir

我希望SCons在我的src/目录中为我生成一些源文件,然后将它们构建为我的构建目录中的任何其他源文件build/variantX.

这是我的SCons文件:

import SCons

def my_builder(env, target, source):
    # do stuff
    pass

env = Environment()
env.VariantDir('build/variant1/', 'src', duplicate=0)
env.Command('src/foobar.cc', 'src/foobar.input', action=my_builder)
env.Program('bin/test', [
    'build/variant1/foobar.cc',
    'build/variant1/test.cc',
    ])
Run Code Online (Sandbox Code Playgroud)

此错误与以下消息:

src/foobar.cc找不到来源,目标需要build/variant1/foobar.o

考虑到我确实提供了构建命令,我认为这是不正确的src/foobar.cc.

现在,我尝试了一些解决方法:

  • 如果我build/variant1/foobar.cc在程序中替换src/foobar.cc它,它确实有效,但显然foobar.o是创建src/而不是build/variant1

  • 如果我src/foobar.cc在命令中替换build/variant1/foobar.cc它,它确实有效,但我希望生成代码src/; (也因为包含目录中的相对路径之类的东西不起作用,除非duplicate=1)

  • 如果duplicate=1,我得到一个类似的错误信息,但这次提到变种目录:

    build/variant1/foobar.cc找不到来源,目标需要build/variant1/foobar.o

有没有解决的办法?这是SCons的限制/错误,还是我的方面存在根本的误解?

code-generation scons

7
推荐指数
1
解决办法
1659
查看次数