从Visual Studio 2005升级到2008有什么好处?
是否值得跳跃的想法,还是等待接下来发生的事情更好?
我有一个个人的Mercurial存储库,可以跟踪我正在进行的一些更改.我想与协作者分享这些更改,但是他们没有/不能获得Mercurial,因此我需要发送整个文件集,协作者将在他们的末尾合并.我正在寻找一种方法来提取在两个修订号之间修改的文件子集的"提示"版本.有没有办法在Mercurial中轻松完成此操作?
添加赏金 - 这对我们来说仍然是一种痛苦.我们经常与内部"客户"合作,他们将我们的源代码版本作为.zip,测试一个小的修补程序更容易分发为.zip叠加而不是补丁(因为我们经常不知道他们的文件的状态).
在C++中,没有事实上的标准日志记录工具.根据我的经验,商店自己动手.但是,在尝试创建可重用的软件组件时,这会产生一些问题.如果系统中的所有内容都依赖于日志记录组件,这会使软件不再可重用,基本上迫使任何下游项目将您的日志记录框架与他们真正想要的组件一起使用.
IOC(依赖注入)并不能真正帮助解决问题,因为组件需要依赖于日志记录抽象.记录组件本身可以添加对文件I/O,触发机制和其他可能不需要的依赖项的依赖性.
向专有日志记录框架添加依赖项是否会牺牲组件的可重用性?
使用TCL,我想实现像Strategy Pattern这样的东西.我想在TCL功能中传递打印输出的"策略",这样我就可以轻松地在打印到屏幕之间切换并打印到日志文件.在TCL中做到这一点的最佳方法是什么?
有些学术问题,但我在编写一些单元测试时遇到了这个问题.
我的单元测试框架(UnitTest ++)允许您创建结构以用作夹具.通常这些都是根据文件中的测试自定义的,所以我将它们放在单元测试文件的顶部.
//Tests1.cpp
struct MyFixture { MyFixture() { ... do some setup things ...} };
TEST_FIXTURE(MyFixture, SomeTest)
{
...
}
//Tests2.cpp
struct MyFixture { MyFixture() { ... do some other setup things, different from Tests1}};
TEST_FIXTURE(MyFixture, SomeOtherTest)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我最近发现(至少使用VS2005),当你使用相同的名称命名fixture结构时(现在结构的两个版本存在同名),然后静默抛出其中一个版本.这是非常令人惊讶的,因为我将我的编译器设置为/ W4(最高警告级别)并且没有出现警告.我想这是一个名称冲突,为什么命名空间被发明,但我真的需要将每个单元测试装置包装在一个单独的命名空间中吗?我只是想确保我没有错过更基本的东西.
有没有更好的方法来解决这个问题 - 这应该发生吗?我不应该看到重复的符号错误或什么?
创建C++继承结构时,必须在多个位置定义完全相同的成员函数:
如果B是一个抽象基类,并且D,E和F都从B继承,那么你可能有:
class B
{
virtual func A( ... params ) = 0;
};
class D : public B
{
func A( ... params );
};
/* ... etc... similar implementations for E and F */
Run Code Online (Sandbox Code Playgroud)
所以,这里显然有一些重复.如果B的接口很大,如果接口需要更改,则可能有许多地方需要更改.
一位同事用嵌入式巧妙创造的#includes,ala提出了一些诡计:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
Run Code Online (Sandbox Code Playgroud)
这看起来有点笨拙?是吗?有没有更好的解决方案来避免双重维护?
此外,这里的解决方案可能是支持语言的更好工具,例如Visual Assist X?
编辑:假设派生类必须具有唯一的实现.
c++ ×3
.net ×1
base-class ×1
code-reuse ×1
dry ×1
estimation ×1
export ×1
logging ×1
mercurial ×1
name-clash ×1
namespaces ×1
tcl ×1