有没有人知道是否有办法检查来自生产修补程序分支的代码是否不是通过某种类型的diff工具比主流分支更新?(hotfix1 vs thrunk)
\src
\thrunk
\releases
\hotfix1
Run Code Online (Sandbox Code Playgroud)
我正在使用带有TFS的vs2010,但是分支机构有很多文件,我想到的就是一次比较一个文件,重新指定其中一个文件的目标路径.
假设我们有一个IBase
带有纯虚方法(接口)的抽象基类.
然后,我们得出CFoo
,CFoo2
从基类.
我们有一个知道如何使用IBase的功能.
Foo(IBase *input);
Run Code Online (Sandbox Code Playgroud)
这些情况下的通常情况是这样的:
IBase *ptr = static_cast<IBase*>(new CFoo("abc"));
Foo(ptr);
delete ptr;
Run Code Online (Sandbox Code Playgroud)
但是指针管理最好避免使用,那么有没有办法在这种情况下使用引用?
CFoo inst("abc");
Foo(inst);
Run Code Online (Sandbox Code Playgroud)
在哪里Foo
:
Foo(IBase &input);
Run Code Online (Sandbox Code Playgroud) 看来它可以用C#,但我需要用C++,最好是跨平台.
基本上,我有一个开关,可以根据单个条件对内容进行排序,并在其他所有内容上回退到默认处理.
说:
switch(color)
{
case GREEN:
case RED:
case BLUE:
Paint();
break;
case YELLOW:
if(AlsoHasCriteriaX)
Paint();
else
goto default;
break;
default:
Print("Ugly color, no paint.")
break;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在Visual Studio中的任何函数上设置断点,有点像bm kernel32!LoadLib*
在WinDbg中?
我知道一种方法是在应用程序启动时中断,找到所需的DLL加载地址,然后将偏移量添加到您可以通过Depends获得的所需函数,并在地址上创建断点.但这真的很慢,切换到WinDbg并返回也很烦人.
也许有更好的方法?
码:
WINDOWPLACEMENT wplcmt = {sizeof(WINDOWPLACEMENT)};
Run Code Online (Sandbox Code Playgroud)
看起来比以前更清洁:
WINDOWPLACEMENT wplcmt;
memset(&wplcmt, 0, sizeof(WINDOWPLACEMENT));
wplcmt.length = sizeof(WINDOWPLACEMENT);
Run Code Online (Sandbox Code Playgroud)
这个东西的组装输出也非常好,对于更长的结构,MSVC甚至使用memset
而不是xor eax, eax
和mov
.从标准的角度来看,它看起来也不错.但我仍然害怕结构没有紧密包装的边界情况说#pragma pack(128)
,窗户突然决定做一个结构的memcmp.
那么使用这样的语法是好还是坏?使用这种初始化是一种好习惯吗?
throw;
如果出现问题,可以从构造函数调用,你不知道如何恢复?
这个想法是让应用程序崩溃,因为状态是未知的.或者你应该总是指定一个参数?
从MSDN我只发现如果没有参数它会重新抛出,但不知道如果没有重新抛出的初始异常会发生什么.
试图到处搜索,不去.
到目前为止的方法是DateTime dt = (DateTime)sqlparam.Value;
.我可以想象在不同的配置,不同的SQL区域设置,不同的PC区域设置等方面会出错.但话说回来,解析SQL datetime字符串的值是更疯狂的想法.
有没有一个可行的解决方案,它是.NET,应该有一个,对吗?
我有一个应用程序,必须根据XPath加载XML文档和输出节点.
假设我从这样的文档开始:
<aaa>
...[many nodes here]...
<bbb>text</bbb>
...[many nodes here]...
<bbb>text</bbb>
...[many nodes here]...
</aaa>
Run Code Online (Sandbox Code Playgroud)
用XPath //bbb
到目前为止一切都很好.
并且选择doc.SelectNodes("//bbb");
返回所需节点的列表.
然后有人<myfancynamespace:foo/>
在根标签中上传一个节点和一个额外名称空间的文档,一切都中断了.
为什么?//bbb
并没有给出一点该死的myfancynamespace
,理论上它应该是好的//myfancynamespace:foo
,因为没有歧义,但表达式返回0结果,就是这样.
这种行为有解决方法吗?
我确实有一个文档的命名空间管理器,我将它传递给Xpath查询.但我不知道名称空间和前缀,所以我不能在查询之前添加它们.
在进行任何选择之前,是否必须预先解析文档以填充命名空间管理器?为什么在地球上这样的行为,它只是没有意义.
编辑:
我正在使用:
XmlDocument
和XmlNamespaceManager
EDIT2:
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
//I wish I could:
//nsmgr.AddNamespace("magic", "http://magicnamespaceuri/
//...
doc.LoadXML(usersuppliedxml);
XmlNodeList nodes = doc.SelectNodes(usersuppliedxpath, nsmgr);//usersuppliedxpath -> "//bbb"
//nodes.Count should be > 0, but with namespaced document they are 0 …
Run Code Online (Sandbox Code Playgroud) 前几天我正在编写带有异常处理的代码,我有一些关于异常,它们的保证和抛出的问题.
基本上,说你有:
class X {
string m_str;
X() : m_str("foo")//what if this throws?
{
ifstream b("a.in")//what if this throws?
}
Run Code Online (Sandbox Code Playgroud)
在浏览了我能找到的所有文章之后,我仍然不知道处理这个问题的干净方法是什么.
说我有一个像这样的代码:
{
...
X myInstanceOfClassX;
...
}
Run Code Online (Sandbox Code Playgroud)
我应该把代码包装catch(exception &)
好吗?如果我这样做,确实string
并ifstream
保证有一个强有力的保证,没有资源泄露,没有任何东西被打开一半?
此外,如果我的类抛出myexception
,这是从异常派生的,catch(exception &)
似乎让它通过.那么让我看到catch(...)
哪个IIRC可以访问违规行为?还有另外一种方法吗?
然后在某处有一条信息,不应该捕获在对象构造函数的子构造函数中抛出的任何异常,并且构造函数应该抛出以防任何成员对象抛出.
如果上面的代码不是从构造函数调用,而是从常规函数调用void foo()
,我应该捕获哪些异常呢?outofmemory_something,filenotfound_something?我在哪里可以找到STL对象可以抛出的定义?它们的实施是否具体?
权威来源在哪里可以清除我对此主题的所有怀疑和疑问?
到目前为止,处理异常似乎就像在一大堆gooo中跳舞一样.错误代码似乎更简单,更安全......
我即将实现一个带有工作项排队的工作线程,当我在思考这个问题时,我想知道我是否做得最好.
有问题的线程必须有一些线程本地数据(在构造时初始化)并将循环工作项,直到满足某些条件.
伪代码:
volatile bool run = true;
int WorkerThread(param)
{
localclassinstance c1 = new c1();
[other initialization]
while(true) {
[LOCK]
[unqueue work item]
[UNLOCK]
if([hasWorkItem]) {
[process data]
[PostMessage with pointer to data]
}
[Sleep]
if(!run)
break;
}
[uninitialize]
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想我会通过关键部分进行锁定,因为队列将是std :: vector或std :: queue,但也许有更好的方法.
具有睡眠功能的部分看起来并不太好,因为睡眠值很大时会有很多额外的睡眠,或者睡眠值很小时需要额外锁定,这绝对没有必要.
但我想不出我可以使用的WaitForSingleObject友好原语而不是临界区,因为可能有两个线程同时排队工作项.因此事件似乎是最佳候选者,如果事件已经设置,则可以松开第二个工作项,并且它不能保证互斥.
也许甚至有更好的方法使用InterlockedExchange类型的函数,这导致更少的序列化.
PS:我可能需要预先处理整个队列并在出队前阶段删除过时的工作项.