Tag: C#的

C ++ 11 std ::函数比虚拟调用慢?

我正在创build一种机制,允许用户使用装饰器模式从基本构build块形成任意复杂的function。 这在function上是很好的,但是我不喜欢它涉及到大量的虚拟调用,特别是当嵌套深度变大的时候。 这让我很担心,因为复杂的function可能经常被调用(> 100.000次)。 为了避免这个问题,我试图把修饰器scheme一旦完成( to_function()就变成了std::function 。 所有的内部函数调用在std::function构造过程中都是连线的。 我认为这将比原来的装饰器scheme更快,因为在std::function版本中不需要执行虚拟查找。 唉,基准testingcertificate我错了:装饰器scheme实际上比我用它构build的std::function更快。 所以现在我想知道为什么。 也许我的testing设置是错误的,因为我只使用两个简单的基本function,这意味着可以caching的Vtable查找? 我使用的代码包含在下面,不幸的是它很长。 SSCCE // sscce.cpp #include <iostream> #include <vector> #include <memory> #include <functional> #include <random> /** * Base class for Pipeline scheme (implemented via decorators) */ class Pipeline { protected: std::unique_ptr<Pipeline> wrappee; Pipeline(std::unique_ptr<Pipeline> wrap) :wrappee(std::move(wrap)){} Pipeline():wrappee(nullptr){} public: typedef std::function<double(double)> FnSig; double operator()(double input) const{ […]

实现一个HashMap

如何去从头开始在C中创build一个HashMap? 将考虑什么参数,以及如何testing散列表有多好? 就像在你说你的哈希映射完成之前需要运行的基准testing用例一样。

C#如何在GAC中注册汇编没有GacUtil?

我需要使用batch file在GAC中注册程序集。 有没有办法findGacUtil.exe的安装位置,或者有没有办法注册没有GacUtil程序集?

将IOrderedEnumerable <KeyValuePair <string,int >>转换为Dictionary <string,int>

我正在回答另一个问题 ,我得到了: // itemCounter is a Dictionary<string, int>, and I only want to keep // key/value pairs with the top maxAllowed values if (itemCounter.Count > maxAllowed) { IEnumerable<KeyValuePair<string, int>> sortedDict = from entry in itemCounter orderby entry.Value descending select entry; sortedDict = sortedDict.Take(maxAllowed); itemCounter = sortedDict.ToDictionary<string, int>(/* what do I do here? */); } Visual […]

将Eigenmatrix转换为C数组

特征库可以将现有的内存映射到特征matrix。 float array[3]; Map<Vector3f>(array, 3).fill(10); int data[4] = 1, 2, 3, 4; Matrix2i mat2x2(data); MatrixXi mat2x2 = Map<Matrix2i>(data); MatrixXi mat2x2 = Map<MatrixXi>(data, 2, 2); 我的问题是,如何从特征matrix(如Matrix3f m)获得c数组(例如float [] a)? 什么是特征matrix的真正布局? 真正的数据存储在正常的C数组?

你将如何在C#中实现“特质”devise模式?

我知道这个特性在C#中是不存在的,但是PHP最近添加了一个叫做Traits的特性 ,在我开始思考这个特性的时候 ,我觉得起初有点傻。 假设我有一个名为Client的基类。 Client有一个名为Name的单个属性。 现在我正在开发一个将被许多不同客户使用的可重复使用的应用程序。 所有客户都同意,客户应该有一个名字,因此它在基地级。 现在顾客A来了,说他也需要跟踪客户的体重。 顾客B不需要重量,但是他想跟踪身高。 客户C想要跟踪重量和高度。 随着性状,我们可以使重量和高度的特点: class ClientA extends Client use TClientWeight class ClientB extends Client use TClientHeight class ClientC extends Client use TClientWeight, TClientHeight 现在,我可以满足我所有客户的需求,而不会增加任何额外的费用。 如果我的客户回来后说:“哦,我真的很喜欢这个function,我可以吗?”,我只是更新类定义,包括额外的特质。 你将如何在C#中完成这个任务? 接口在这里不起作用,因为我需要属性和任何关联方法的具体定义,我不想为每个类的版本重新实现它们。 (“客户”是指雇用我作为开发人员的字面上的人,而“客户”是指编程类;我的每个客户都有他们想要logging信息的客户)

使用Unity3D和Visual Studio 2013

我如何得到Unity3Ddebugging代码,以及我现在只有脚本代码的Visual Studio 2013。 示例:与Flash Professional一样用于debugging,FlashDevelop仅用于脚本。 我的问题是,如何获得与Visual Studio 2013的Unity3D链接。我已经在互联网上search,发现Unity3D只适用于VisualStudio 2010。

NUnit 3.0和Assert.Throws

我正在用NUnit 3.0编写一些unit testing,而不像v2.x, ExpectedException()已经从库中删除了。 基于这个答案,我可以肯定地看到试图特别抓住testing的地方的逻辑,一个人期望他们的系统抛出exception(而不是仅仅说“testing中的任何地方”)。 不过,我倾向于对我的“安排”,“行为”和“断言”步骤非常明确,这使得它成为一个挑战。 我曾经这样做过: [Test, ExpectedException(typeof(FormatException))] public void Should_not_convert_from_prinergy_date_time_sample1() { //Arrange string testDate = "20121123120122"; //Act testDate.FromPrinergyDateTime(); //Assert Assert.Fail("FromPrinergyDateTime should throw an exception parsing invalid input."); } 现在我需要做一些事情: [Test] public void Should_not_convert_from_prinergy_date_time_sample2() { //Arrange string testDate = "20121123120122"; //Act/Assert Assert.Throws<FormatException>(() => testDate.FromPrinergyDateTime()); } 这不是可怕的,但在我看来,这个法案和声明混淆了。 (很明显,对于这个简单的testing,这并不难,但在更大的testing中可能会更具挑战性)。 我有一个同事build议我完全摆脱Assert.Throws ,只是做一些事情: [Test] public void Should_not_convert_from_prinergy_date_time_sample3() { […]

最有效的方法来testinglambdaexpression式的相等性

给定方法签名: public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2) 如果两个expression式是相同的,那么最有效的方式是什么? 这只需要工作的简单expression式,通过这个我的意思是所有将被“支持”将是简单的MemberExpressions,例如c => c.ID。 一个示例调用可能是: AreTheSame<User>(u1 => u1.ID, u2 => u2.ID); –> would return true

虚拟function默认参数

任何人都可以解释一下c ++编译器为虚函数的参数保留默认值吗? 我知道在子类中更改这些参数是一个坏主意,但是为什么? 谢谢。