我正在改变我的一些类别,从广泛使用吸气剂和制定者到更加诡计多端的财产使用.
但现在我被卡住了,因为我之前的一些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) 请注意,这不是如何编写单元测试来验证编译错误?因为我不关心测试外部库或编译器本身的正确性.
它在C++中是典型的,特别是在处理模板时,采用阻止某些特定代码编译的技术.由于这些问题可能会变得复杂,确保特定代码片确实会产生编译器错误的最佳方法是什么?
由于测试甚至不应该编译,你不能依赖诸如boost-test之类的东西,所以我想它应该集成在构建系统中?这些问题通常如何处理?
我刚刚发现了vim的taglist插件,并阅读了如何将它与ctags一起使用.
然而,令人失望的是ctags是一个非常简单的解析器.
有没有更完整的替代方案?
具体来说,我正在寻找一些东西:
扩展#define(x, y) x ## y函数声明的样式宏
处理#include陈述
允许为依赖项指定包含路径
我看到clang提供了一个用于访问c AST的程序api,所以这肯定不是很难吗?
有人已经做过吗?
-
编辑:
这些不削减它:
clang_indexer - 不编译; 什么时候(黑客攻击后),不起作用(无休止的错误).
clang_complete - 似乎没有比ctags好.没有特定于上下文的建议,没有结构完成,没有函数参数,没有宏扩展; 只是一个符号列表和它们来自的文件.
在C中,我可以调试代码:
fprintf(stderr, "blah: %f", some_var);
Run Code Online (Sandbox Code Playgroud)
在GLSL中......无论如何我只是在Vertex或Fragment着色器中转储一个值?我不在乎它是否缓慢; 我只想转出价值.理想情况下,我想要一个如下设置:
这可行吗?(我不关心性能;我只是想为一帧做这个).
谢谢!
这是我的代码
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数据结构?哪一个?
我使用带有vim的cscope.对多个文件进行大量编辑时,cscope将报告已更改文件的旧行号.如何从vim重建cscope db而不会丢失
谢谢
我正在使用一些相当旧的文件.不同的程序创建了不同的文件,因此其中一些以\ r(mac)结尾,一些以\n(unix)结尾.我希望能够在这些文件上运行diff,grep等命令,但将\ r \n的命令视为一个巨行.有没有人知道一个版本的diff,grep等可以正常使用所有新行?
ETA:我也希望它们是unix实用程序,所以我可以在脚本,emacs等中使用它们......
我对如何从不同的本地git分支提交几个svn分支感到困惑.特别是,尽管我已经阅读了很多关于这个主题的相关问题,但到目前为止还没有人能解释过一个具体的问题:
如果我已经有一些本地分支,我如何判断他们正在跟踪哪个远程svn分支(如果有的话)?
从这个答案看来,您可以更改要跟踪的分支,但如何查询它?
git branch -v在这方面似乎没有特别的帮助(即没有给出额外的信息).我也查看了所有文本文件,.git/但也找不到任何内容.
我有一个库创建对象(类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.我没有粘贴它,但我只是说我为此目的使用回调机制.
这段代码有效,但我有几个问题:
在Count函数(以及所有其他C++操作函数中)可以这样传递a或者更好地做类似的事情const shared_ptr<A>&吗?在我在python …
我希望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的限制/错误,还是我的方面存在根本的误解?
c++ ×3
python ×2
vim ×2
boost ×1
boost-python ×1
cscope ×1
ctags ×1
descriptor ×1
diff ×1
git ×1
git-svn ×1
glsl ×1
inheritance ×1
macos ×1
overloading ×1
properties ×1
scons ×1
stl ×1
templates ×1
unit-testing ×1
unix ×1
utilities ×1