小编tob*_*sen的帖子

用于Visual C++的ReSharper(或类似的东西)?

我见过ReSharper推荐了很多不幸的是,它不支持Visual Studio中的C++.你能推荐什么吗?我已经使用了Visual Assist,它可以很好地完成它的工作,但与ReSharper相比它非常有限.

有什么建议?

resharper visual-studio visual-c++

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

需要引用:预处理器使用是不好的OO练习

我相信,预处理器指令的使用就像#if UsingNetwork是糟糕的OO实践 - 其他同事则没有.我认为,当使用IoC容器(例如Spring)时,如果相应编程,可以轻松配置组件.在此上下文中任一个属性格式IsUsingNetwork可由IoC容器或设置,如果"使用网络"实现的行为不同,该接口的另一种实现方式应当实现,并注射(例如:IService,ServiceImplementation,NetworkingServiceImplementation).

有人可以提供OO-Gurus的引用书籍中的参考资料,基本上是"如果你尝试配置应该通过IoC容器配置的行为,那么预处理器使用是不好的OO实践"?

我需要这种引用来说服同事重构......

编辑:我确实知道并同意在编译期间使用预处理程序指令更改目标平台特定代码很好,这就是预处理程序指令的用途.但是,我认为应该使用运行时配置而不是compiletime-configuration来获得良好的设计和可测试的类和组件.换句话说:使用#defines和#if超出它们的意图将导致难以测试代码和设计糟糕的类.

有没有人沿着这些方面阅读一些东西并且可以给我这样我可以参考?

c# oop dos-donts c-preprocessor

17
推荐指数
4
解决办法
4378
查看次数

0MQ:如何以线程安全的方式使用ZeroMQ?

我阅读了ZeroMq指南,我偶然发现了以下内容:

你不能在线程之间共享ØMQ套接字.ØMQ套接字不是线程安全的.从技术上讲,它可以做到这一点,但它需要信号量,锁或互斥量.这将使您的应用程序变得缓慢而脆弱.在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术.

后来:

切记:除了创建它们的线程外,不要使用或关闭套接字.

我也明白ZeroMQ Context是线程安全的.

如果一个类在.Net中注册另一个类的事件,则可以从与创建监听器的线程不同的线程调用此事件.

我认为只有两个选项可以从事件处理程序中通过ZeroMQ-Sockets调度:

  • 将eventhandler-invoking-thread同步到Socket创建ZeroMQ-的线程
  • 通过使用threadsafe ZeroMQ-为eventhandler中的线程创建一个新的ZeroMQ- Socket/获取现有Socket的ZeroMQ-Context

似乎0MQ-Guide不鼓励第一个,我不认为为每个线程创建一个新的ZeroMq-Socket是高性能/可行的方式.

我的问题:
在事件处理程序中通过0MQ发布消息的正确模式(它的意图是什么)是什么?

此外,该指南的作者在编写时还考虑到.Net的ZeroMQ-Binding:

在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术.?

这里有一些示例代码来强调我的问题/问题:

public class ExampleClass
{
    public event EventHandler<ByteEventArgs> SomethinIsCalledFromAnotherThread;
}

public class ByteEventArgs : EventArgs
{
    public byte[] BytesToSend;
}


public class Dispatcher
{
    ZMQ.Context ctx;

    public Dispatcher(ZMQ.Context mqcontext, ExampleClass exampleClassInstance)
    {
        this.ctx = mqcontext;
        exampleClassInstance.SomethinIsCalledFromAnotherThread += new EventHandler<ByteEventArgs>(exampleClass_SomethinIsCalledFromAnotherThread);
    }

    void exampleClass_SomethinIsCalledFromAnotherThread(object sender, ByteEventArgs e)
    {
        // this method might be called …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading thread-safety zeromq

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

WPF相当于Silverlight"RootVisual"

我正在尝试将应用程序从silverlight移植到wpf.不幸的是,我是两个人的新手.是否与WPF中的以下Silverlight代码等效?

        private static Canvas GetCanvas()
        {
            var uc = Application.Current.RootVisual as UserControl;
            if (uc == null)
            {
                return null;
            }
            return uc.FindName("ChoiceCanvas") as Canvas;
        }
Run Code Online (Sandbox Code Playgroud)

目前我正在使用

Application.Current.MainWindow.FindName("ChoiceCanvas") as Canvas;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,也许是因为ChoiceCanvas位于UserControl而不是MainWindow中?

c# silverlight wpf

7
推荐指数
2
解决办法
7827
查看次数

对于真实世界的应用程序,是否有MDSD/MDA成功案例?

我目前面临的情况是,我作为测试驱动开发的倡导者必须与模型驱动软件开发(MDSD)/模型驱动架构(MDA)的倡导者竞争.

在我看来,代码生成是我工具箱中的一个有价值的工具,我需要时大量使用模板和自动化.当我认为这有助于理解内部工作或讨论白板上的架构时,我还用UML创建图表.但是,我强烈怀疑通过UML创建软件(创建状态图和序列图以创建工作代码而不仅仅是代码的骨架)对于多层应用程序(数据库层,业务/域层和Gui,甚至可能是分布式的)更有效.在我看来,当谈到MDSD时,CASE工具突然不再仅仅是一种工具,而是满足的要求:一方面,我看到它,

所有这些让我想知道是否有一个成功的故事(产品是及时推出,在变幻无常的时间内,只有少数错误和部分软件已经被重用),以满足现实世界的应用需求.这个creteria并使用严格的模型驱动方法开发:

  • 它与对象管理组(OMG)或与MDSD/MDA/SOA /相关的顾问无关
  • 该应用程序与业务流程建模无关,也不是CASE工具本身
  • 最终用户积极使用该应用程序
  • 它至少有三层,包括一个超出显示原始表值的用户界面,而不是常见的MDA/MDSD示例之一("如何建模咖啡机,交通信号灯,洗碗机").

mdsd mda model-driven-development

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

如何为MongoDb命名空间中的所有类注册ClassClassMap?

MongoDB的驱动教程提示注册类映射到通过自动映射

BsonClassMap.RegisterClassMap<MyClass>();
Run Code Online (Sandbox Code Playgroud)

我想自动化给定命名空间的所有类,而不是为每个类显式写下RegisterClassMap.这目前可能吗?

c# mongodb mongodb-.net-driver

7
推荐指数
2
解决办法
9602
查看次数

XSD:如何限制派生复杂类型的枚举值?

给出以下示例:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="Book" abstract="true">
        <xs:sequence>
            <xs:element name="titel" type="xs:string">
            </xs:element>
            <xs:element name="bookCode" type="BookEnum"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Lyric">
        <xs:complexContent>
            <xs:extension base="Book">
                <xs:sequence>
                    <xs:element name="author" type="xs:string">
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:simpleType name="BookEnum">
        <xs:restriction base="xs:int">
            <xs:enumeration value="Paperback"/>
            <xs:enumeration value="Hardcover"/>
            <xs:enumeration value="Liporello"/>
            <xs:enumeration value="None"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

抒情来源于书.我想将complexType"Lyric"的BookEnum的可能值限制为"平装".

"无","Liporello"和"精装"不再是"抒情"的有效值.这可以在xsd中完成吗?

xsd enumeration restriction

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

使用迭代器使用自己的元素追加std :: vector

下面的代码按预期工作(测试通过)但我想知道如果以这种方式使用迭代器在c ++中被认为是一种不好的做法,或者它是否正常.

也许这是特定的std::vector,其他集合表现不同,最佳实践在集合(甚至他们的实现)之间有所不同?

在其他语言中肯定不行,并且大多数情况下更改集合将使迭代器无效并抛出异常.

BOOST_AUTO_TEST_CASE (ReverseIteratorExample) {
    std::vector<int> myvector;
    for(int i = 0; i < 5; i++)
    {
        myvector.push_back(i);
    }

    // is this generally a bad idea to change the vector while iterating?
    // is it okay in this specific case?
    myvector.reserve(myvector.size() + myvector.size() - 2 );
    myvector.insert(myvector.end(), myvector.rbegin() + 1, myvector.rend() -1);

    int resultset [8] = { 0,1,2,3,4,3,2,1 };
    std::vector<int> resultVector( resultset, resultset + sizeof(resultset)/sizeof(resultset[0]) );
    BOOST_CHECK_EQUAL_COLLECTIONS(myvector.begin(), myvector.end(), resultVector.begin(), resultVector.end());
}
Run Code Online (Sandbox Code Playgroud)

总结问题:

  1. 在迭代时更改向量通常是个坏主意吗?
  2. 在这种特殊情况下可以吗?
  3. 这是特定的std::vector和其他集合表现不同? …

c++ iterator stdvector

6
推荐指数
1
解决办法
295
查看次数

巨大的(20位)主键和SQLite

如果我尝试将带有20位主键的数据插入到SQLite数据库中,我会在第二个插入语句中出错,因为它"不是唯一的".如果我从SQLite命令提示中选择我可以看到的值,即主键是用科学计数法编写的.列类型为十进制.是否有办法强制SQLite"按原样"插入值,保持精度/"正常表示",即使值很长?

database sqlite primary-key

5
推荐指数
1
解决办法
1944
查看次数

从.vdproj构建没有Devenv的合并模块

我读了几个关于通过命令行构建mergemodules的Stackoverflow问题,但当有人建议使用devenv进行编译或使用Dark从现有的msi文件创建wix文件时,所有这些都被接受了.

考虑以下因素:

  • VisualStudio未安装在我必须使用的构建服务器上.
  • 我正在使用nant + msbuild来编译解决方案
  • 我想从.vdproj编译mergemodules(因为Visual Studio会自动检测依赖项)
  • 并从多个mergemodules创建一个msi设置

...如何在没有devenv的情况下从命令行构建合并模块,并且不会失去在visualstudio中为mergemodule解析自动化依赖关系的舒适度?也许有一个我没有找到它的nanttask?

msbuild nant vdproj merge-module devenv

5
推荐指数
1
解决办法
4081
查看次数