我有两个需要XPathDocument服务。 我希望能够定义XPathDocumnet命名实例以用于两个服务的configuration。 我也希望能够告诉StuctureMap使用XPathDocument哪个构造函数。 当我尝试获取XPathDocument的实例时,它告诉我它无法findXmlReader的插件types。 我想使用需要一个stringuri的构造函数的XML文件。 我似乎无法得到这个工作。 这是StructureMapconfiguration代码。 public class Service1 : IService1 { public Service1(XPathDocument document) {} } public class Service2 : IService2 { public Service2(XPathDocument document) {} } public class Registry1 : Registry { ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument1")); ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument2")); ForRequestedType<XPathDocument>().AddInstances(x => { x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile1") .WithName("XPathDocument1"); x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile2") .WithName("XPathDocument2"); }); […]
我最近使用三重缓冲区的std :: atomic将C ++ 11作为端口,用作并发同步机制。 这个线程同步方法背后的想法是,对于生产者 – 消费者的情况,你有一个运行速度更快的生产者,消费者,三重缓冲可以给一些好处,因为生产者线程不会因为等待而“放慢”为消费者。 在我的情况下,我有一个更新为〜120fps的物理线程和一个以〜60fps运行的渲染线程。 很明显,我希望渲染线程总是获得最近的状态,但是我也知道,由于速率的不同,我将跳过物理线程中的很多帧。 另一方面,我希望我的物理线程保持其不变的更新速度,而不会被较慢的呈现线程locking我的数据所限制。 原来的C代码是由remis-thoughts制作的,完整的解释在他的博客里 。 我鼓励任何有兴趣阅读的人进一步了解原始实施。 我的实现可以在这里find。 基本思想是在任何给定的时间,有一个有3个位置(缓冲区)和一个primefaces标志的数组,它们被比较和交换来定义哪个数组元素对应于什么状态。 这样,只有一个primefacesvariables用于模型数组的所有3个索引和三重缓冲背后的逻辑。 缓冲区的3个位置被命名为Dirty,Clean和Snap。 生产者总是写入脏指数,并且可以翻转书写器以将脏指数与当前的干净指数交换。 使用者可以请求一个新的Snap,它使用Clean索引交换当前的Snap索引以获得最新的缓冲区。 消费者总是在Snap位置读取缓冲区。 该标志由一个8位无符号整数组成,这些位对应于: (未使用)(新写入)(2个脏)(2个清理)(2个捕捉) 新的写额外位标志由写入器设置并由读取器清除。 读者可以使用它来检查自上次捕捉以来是否有任何写入,如果没有,则不会再捕捉。 标志和索引可以使用简单的按位操作来获得。 好的,现在的代码: template <typename T> class TripleBuffer { public: TripleBuffer<T>(); TripleBuffer<T>(const T& init); // non-copyable behavior TripleBuffer<T>(const TripleBuffer<T>&) = delete; TripleBuffer<T>& operator=(const TripleBuffer<T>&) = delete; T snap() const; // get […]
问题 到目前为止,对stream的exception支持是可怕的。 当Boost.System库被采用到C ++ 11中时,人们给人的印象是exception会改善。 所有的更改都是用std::system_errorreplacestd::exception 。 虽然<system_error>对开发人员来说是一个很好的库,但是标准委员会和标准库实现者并没有采取任何措施来改进exception消息。 想知道它有多糟糕,下面简要总结一下: 发生错误。 setstate用于设置badbit或failbit 。 clear由setstate 。 如果启用了exception, clear将会抛出一个ios_base::failure 。 是的,这意味着所有的错误都抛出了相同的无用的exception消息。 这是在basic_ios级别指定的,所以所有的派生类都会遇到这个问题。 违规报价: (iostate.flags)/ 4 效果 :如果((state | (rdbuf() ? goodbit : badbit)) & exceptions()) == 0 ,则返回。 否则,该函数会抛出类basic_ios::failure (27.5.3.1.1)的对象fail ,该对象由实现定义的参数值构造。 以下是“实现定义的参数值”给我们的例子: ios_base::clear: unspecified iostream_category error 有一个简单的修复? Boost.Filesystem和Boost.Iostreams都不能替代<iostream> 。 前者是一个可移植的处理文件系统的库(可能会出现在下一版C ++中),而后者与..Sources和Sinks有关。 该文档指出,它将exception委托给ios_base::failure 。 Boost.Filesystem提供<boost/filesystem/fstream.hpp> ,它使用path而不是const char*参数来open() 。 它显示了一个如何从标准库类inheritance的例子: […]
例子: "Something %d" and "Something else %d" // Compatible "Something %d" and "Something else %f" // Not Compatible "Something %d" and "Something %d else %d" // Not Compatible "Something %d and %f" and "Something %2$f and %1$d" // Compatible 我想这应该有一些C函数,但我没有得到任何相关的search结果。 我的意思是编译器正在检查格式string和参数是否匹配,所以用于检查的代码已经写好了。 唯一的问题是我怎样称呼它。 我正在使用Objective-C,所以如果有一个Objective-C特定的解决scheme也可以。
在各种堆栈溢出问题和博客post之间,关于开放式generics和StructureMap的主题有相当多的文档。 不幸的是,我必须错过一些东西,因为我试图使用scan来执行configuration,而具有“贪婪”构造函数的类实现还没有工作。 我希望StructureMap通过引用其实现的接口来获取下一个类的实例。 ToCsvService存在于名为“基础结构”的未引用程序ToCsvService 。 IToCsvService存在于名为Core的引用程序IToCsvService 。 正如你可以看到ToCsvService有一个“贪婪的”构造函数。 public class ToCsvService<TSource> : IToCsvService<TSource> { public ToCsvService(ICollection<TSource> collection) { } } 我让StructureMap通过ConnectImplementationsToTypesClosing方法了解ToCsvService 。 ObjectFactory.Initialize(cfg => { cfg.Scan(scan => { scan.Assembly("Infrastructure"); scan.WithDefaultConventions(); // even with this call StructureMap cannot use ToCsvService // instance of IToCsvService (though wouldn't expect it to) scan.ConnectImplementationsToTypesClosing (typeof(IToCsvService<>)); }); }); 从ObjectFactory.WhatDoIHave()方法看来,StructureMap知道ToCsvService 。 PluginType名称说明 […]
我正在玩Reflection.Emit,并且发现了关于使用不多的EmitCalli 。 好奇,我想知道它是否与常规方法调用有所不同,所以我掀起了下面的代码: using System; using System.Diagnostics; using System.Reflection.Emit; using System.Runtime.InteropServices; using System.Security; [SuppressUnmanagedCodeSecurity] static class Program { const long COUNT = 1 << 22; static readonly byte[] multiply = IntPtr.Size == sizeof(int) ? new byte[] { 0x8B, 0x44, 0x24, 0x04, 0x0F, 0xAF, 0x44, 0x24, 0x08, 0xC3 } : new byte[] { 0x0f, 0xaf, 0xca, […]
我有c++filt命令来去掉一个符号,什么是做相反的工具,并打破了一个符号名称? 如果我想调用dlsym()一个错误的C ++函数名称,这将是有用的。 我宁愿不要在代码中硬编码名称,因为随着时间的推移,由于新的编译器版本或新的编译器品牌被使用,或者由于编译多个平台,目前可能会改变。 是否有一个程序化的方式来获得代表一个C ++函数在运行时的string,以便代码是独立于编译器? 一种可能的方法是在编译时调用一个实用程序,为正在使用的编译器执行名称修改,并将适当的错位C ++符号名称插入到dlsym()使用的string中。 这里是最接近我在这个网站上find的解决scheme ,它是通过使用一个固定的C风格的名字来间接地在你想要dlsym()的库中定义的C ++符号来完成的,但是如果你没有控制权图书馆提供了什么,这不是一个选项。
我正在使用MSTest ,我想一次为testing类中的所有方法设置相同的testing类别,而不是单独为每个方法设置TestCategory属性。 如何才能做到这一点? 最方便,最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。 最终目标是在TFS签入的testing运行期间跳过集成testing。
我按照GDB维基上的说明安装了用于查看STL容器的python漂亮打印机。 我的~/.gdbinit现在看起来像这样: python import sys sys.path.insert(0, '/opt/gdb_prettyprint/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end 但是,当我运行GDB并尝试打印STLtypes时,我得到以下内容: print myString Python Exception <class 'gdb.error'> No type named std::basic_string<char>::_Rep.: $3 = 任何人都可以点亮这个? 我运行的是GDB 7.4附带的Ubuntu 12.04。
突变testing已经出现了一段时间,似乎至less有一个或两个商业突变testing框架的C / C + +。 你用过吗? 你有什么经验? 有没有开源的替代品?