使用mercurial克隆存储库时,可以传递-U/ - noupdate标志以创建没有工作副本的克隆.如果忘记在克隆时传递此标志,是否可以删除工作副本?如果是这样,怎么样?
这在概念上类似于这个git问题,但对于mercurial.
自从我上次编写手臂汇编程序以来已经有一段时间了,我对细节有点生疏.如果我从arm调用C函数,我只需要担心保存r0-r3和lr,对吧?
如果C函数使用任何其他寄存器,它是否负责保存堆栈中的那些并恢复它们?换句话说,编译器会生成代码来为C函数执行此操作.
例如,如果我在汇编程序函数中使用r10,我不必将其值放在堆栈或内存中,并在C调用后弹出/恢复它,是吗?
这是针对arm-eabi-gcc 4.3.0.
如果我想使类适应,并且可以从外部选择不同的算法 - C++中最好的实现是什么?
我主要看到两种可能性:
这是一个小例子,在各种版本中实现:
版本1:抽象基类
class Brake {
public: virtual void stopCar() = 0;
};
class BrakeWithABS : public Brake {
public: void stopCar() { ... }
};
class Car {
Brake* _brake;
public:
Car(Brake* brake) : _brake(brake) { brake->stopCar(); }
};
Run Code Online (Sandbox Code Playgroud)
版本2a:模板
template<class Brake>
class Car {
Brake brake;
public:
Car(){ brake.stopCar(); }
};
Run Code Online (Sandbox Code Playgroud)
版本2b:模板和私有继承
template<class Brake>
class Car : private Brake {
using Brake::stopCar;
public:
Car(){ stopCar(); }
};
Run Code Online (Sandbox Code Playgroud)
来自Java,我自然倾向于始终使用版本1,但模板版本似乎经常是首选,例如在STL代码中?如果这是真的,是因为内存效率等(没有继承,没有虚函数调用)?
我意识到版本2a和2b之间没有太大的区别,请参阅C++ …
c++ templates abstract-class design-patterns virtual-functions
我想获得一份可用的无线网络列表.理想情况下,这将是通过一些C调用,但我不介意我是否必须通过系统调用来解决它.如果所需的C呼叫或程序不需要一些奇特的第三方包,那就更好了.
互联网似乎建议我使用sudo iwlist <interface> scan它似乎从命令行做的技巧,但我宁愿不要求root权限.我只想看到基础知识,而不是改变任何东西.
在Vim中,正常模式下的*键搜索光标下的单词.在GNU Emacs中,最接近的本机等价物将是:
C-s C-w
Run Code Online (Sandbox Code Playgroud)
但这并不完全相同.它打开增量搜索迷你缓冲区,并从当前缓冲区中的光标复制到单词的末尾.在Vim中,你会搜索整个单词,即使你在按*时也在单词的中间.
我已经煮了一些elisp来做类似的事情:
(defun find-word-under-cursor (arg)
(interactive "p")
(if (looking-at "\\<") () (re-search-backward "\\<" (point-min)))
(isearch-forward))
Run Code Online (Sandbox Code Playgroud)
在点燃之前,它会向后退到单词的开头.我把它绑定到C- +,这很容易在我的键盘上打字,类似于*,所以当我输入C-+ C-w它从单词的开头复制到搜索迷你缓冲区.
但是,这仍然不完美.理想情况下,它会regexp搜索"\<" word "\>"不显示部分匹配(搜索单词"bar"不应匹配"foobar",只是"bar"自己).我尝试使用search-forward-regexp和concat'ing\<>但是这并没有包装在文件中,没有突出显示匹配并且通常非常蹩脚.isearch-*函数似乎是最好的选择,但是这些在编写脚本时表现不佳.
有任何想法吗?任何人都可以对elisp的位进行任何改进吗?还是有其他一些我忽略的方式?
Android游戏My Paper Plane是如何实现倾斜控制的一个很好的例子,但我一直在努力理解如何做类似的事情.
我有以下示例,它使用SensorManager中的getOrientation().整个事情都在这里的pastebin上.它只是将方向值打印到文本字段.这是最相关的片段:
private void computeOrientation() {
if (SensorManager.getRotationMatrix(m_rotationMatrix, null,
m_lastMagFields, m_lastAccels)) {
SensorManager.getOrientation(m_rotationMatrix, m_orientation);
/* 1 radian = 57.2957795 degrees */
/* [0] : yaw, rotation around z axis
* [1] : pitch, rotation around x axis
* [2] : roll, rotation around y axis */
float yaw = m_orientation[0] * 57.2957795f;
float pitch = m_orientation[1] * 57.2957795f;
float roll = m_orientation[2] * 57.2957795f;
/* append returns an average of the last …Run Code Online (Sandbox Code Playgroud) 我的一些同事确信将构建工件提交到subversion存储库是个好主意.这样的论点就是这样,测试机器上的安装和更新很容易 - 只需"svn up"!
我敢肯定有一些重要的论据反对这种不好的做法,但我能想到的都是蹩脚的,比如"它需要更多的空间".没有做到这一点的最佳原因是什么?我们应该采取哪些其他方法呢?
这适用于Java代码,如果这会产生影响.一切都是从Eclipse编译的(没有自动PDE构建).
当我说添加构建工件时,我的意思是提交看起来像这样:
"Added the new Whizbang feature"
M src/foo/bar/Foo.java
M bin/Foo.jar
Run Code Online (Sandbox Code Playgroud)
每个代码更改都有相应的生成的jar文件.
我不想讨论这种方法的优点,只要有可能.我相信答案是"不".但也许有人会让我感到惊讶!
想象一下,你有一个核心小部件类.它有一个calculateHeight()返回高度的方法.高度太大 - 这导致按钮(比如说)太大了.您可以扩展DefaultWidget以创建自己的NiceWidget,并实现自己calculateHeight()的返回更好的大小.
现在,一个库类WindowDisplayFactory,在一个相当复杂的方法中实例化DefaultWidget.您希望它使用您的NiceWidget.工厂类的方法看起来像这样:
public IWidget createView(Component parent) {
DefaultWidget widget = new DefaultWidget(CONSTS.BLUE, CONSTS.SIZE_STUPIDLY);
// bunch of ifs ...
SomeOtherWidget bla = new SomeOtherWidget(widget);
SomeResultWidget result = new SomeResultWidget(parent);
SomeListener listener = new SomeListener(parent, widget, flags);
// more widget creation and voodoo here
return result;
}
Run Code Online (Sandbox Code Playgroud)
这就是交易.结果使DefaultWidget深入其他对象的层次结构中.问题 - 如何让这个工厂方法使用我自己的NiceWidget?或者至少calculateHeight()在那里自己动手.理想情况下,我希望能够修补DefaultWidget,以便其calculateHeight做正确的事情......
public class MyWindowDisplayFactory {
public IWidget createView(Component parent) {
DefaultWidget.class.setMethod("calculateHeight", myCalculateHeight);
return super.createView(parent);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在Python,Ruby等方面可以做的事情setMethod().虽然我已经发明了这个名字.对我开放的其他选择是:
createView()方法的代码复制并粘贴到我自己的继承工厂类的类中工厂类无法更改 …
每次我尝试从TortoiseSVN签出或更新特定的存储库时,我都会收到此错误:
缺少更新报告关闭标记
我完全不知道我能做些什么来避免或纠正这个错误.
有人可以指点我正确的方向吗?
为什么ANSI C编译器不会在函数调用中标记字符串文字参数的使用,其中相关参数没有const限定符?例如,以下代码可以通过尝试写入只读内存来生成异常.
void somefunc(char buffer[10]);
void somefunc(char buffer[10]) {
int i;
for (i = 0; i < 10; i++)
buffer[i] = 0;
}
int main(int argc, char **argv) {
somefunc("Literal");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这种情况可以在编译时识别,但VS2010和gcc似乎没有这样做.使用const char*参数调用somefunc将生成编译器警告.