标准委员会于3月21 日投票批准了P0174中提出的std::iterator的弃用 : 对于读者来说,空的参数的长序列对于读者来说要简单得多,而不是简单地在类定义本身中提供预期的types定义,这是当前工作草案采用的方法,遵循C ++ 14中设置的模式 鼓励从std::iteratorinheritancePre-C ++ 17,从迭代器样板实现中移除繁琐的代码。 但是,弃用将需要这些东西之一: 迭代器样板现在需要包含所有必需的typedef 使用迭代器的algorithm现在需要使用auto而不是依赖迭代器来声明types Loki Astaribuild议 std::iterator_traits可以更新为无需inheritancestd::iterator 有人可以启发我,我应该期望哪些选项,因为我devise的自定义迭代器与C + + 17兼容性的眼睛?
我正在对代码进行一些unit testing,这些代码可能会根据input引发许多exception。 所以我尝试了下面的代码:(例如简化) static void Main(string[] args) { RunTest<ArgumentException>(); } static void RunTest<T>() where T : Exception, new() { try { throw new T(); //throw new ArgumentException(); <– Doesn't work either } catch (T tex) { Console.WriteLine("Caught passed in exception type"); } catch (Exception ex) { Console.WriteLine("Caught general exception"); } Console.Read(); } 但是这总是会打印出“抓住一般exception”, catch(T tex)处理程序将永远不会工作。 […]
我正在尝试在Qt使用Qt Creator中编译一个Hello World程序。 我越来越'cl'不被识别为内部或外部命令。 我正在使用Windows 7并安装了2008和2010版本。 当我使用Mingw它正在编译罚款,但如果使用VS 2008是给这个错误。 在设置Env Path = ..;;; C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ bin之后,它也显示相同的错误。
我有一个在.NET 4.0和VS2010中使用C#的.NET项目。 我想要做的是添加一些asynchronous重载到我的库,以使用.NET Framework 4.5中的用户使用await关键字更轻松地进行asynchronous编程。 现在被重载的方法是非asynchronous的。 另外我不想自己使用任何asynchronous方法,只是创build新的并使其可用。 在.NET 4.0和VS2010中创buildasynchronous方法是可能的,如果是这样,.NET 4.0asynchronous方法应该是什么样子? 因为我正在使用VS2010,所以我无法访问“async”关键字,因此需要在.NET 4.0中模拟这种行为。 例如,它是否需要返回任何特定的types,并且是否需要在该方法内部发生任何代码,以使它正在调用的当前非asynchronous代码asynchronous发生?
一些背景的人阅读这个在未来(如果它没有被locking)。 我倾向于使用高级语言编程来首先理解问题。 覆盖所有可能的angular落案例后,我继续将代码翻译成C ++(或C)。 我写的大部分代码都有math,所以MATLAB是我使用的语言(对我来说Python的替代scheme)。 无论如何,我手动将代码从MATLAB转换为C ++。 有谁知道使用MATLAB编码器是否有优势/劣势? 这是一个新的产品,非常昂贵,但除了节省翻译时间还有其他好处吗?
什么是“ 奇怪的循环模板模式 ”的一些实际用途? 通常显示的“ 计数class ”例子对我来说不是一个令人信服的例子。
简单地说:在iPhone和Android版本之间共享/重复使用代码的最有效方法是什么? 我认为两个最常见的情况是: 空白的石板新项目,提前知道有一大块可重复使用的逻辑,需要在每个设备上运行。 现有的iPhone代码库,C,C ++和Objective-C的移植到Android NDK或其他。 当然,在一个完美的世界里,所有的应用程序都会插入到神奇的云中,所有可重用的逻辑都将在Google App Engine或某些Web服务中运行,但这不是这个问题的精神。 在经历了一个iPhone到Android的端口,没有任何代码重用,并且看到人们不得不忍受的痛苦之后,我想知道其他人是如何避免的。
该文件指出: Q_OBJECTmacros必须出现在声明自己的信号和槽或者使用Qt的元对象系统提供的其他服务的类定义的私有部分。 但究竟是什么意思? 哪些QObject派生类可以安全地忽略它? 如果您在QObject派生类中省略Q_OBJECT,然后inheritance它,会出现问题吗? 基本上我想知道什么时候可以从我的Qt类中忽略它。
在.NET 4.5 / C#5中, IReadOnlyCollection<T>用Count属性声明: public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable { int Count { get; } } 我想知道,对于ICollection<T>实现IReadOnlyCollection<T>接口是否有意义: public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>* 这意味着实现ICollection<T>将自动实现IReadOnlyCollection<T> 。 这听起来对我来说很合理。 ICollection<T>抽象可以看作是IReadOnlyCollection<T>抽象的扩展。 请注意, List<T> ,例如,同时实现ICollection<T>和IReadOnlyCollection<T> 。 然而它并没有被devise成这样。 我在这里错过了什么? 为什么会select当前的实施呢? UPDATE 我正在寻找一个使用面向对象devise推理来解释原因的答案: 实现IReadOnlyCollection<T> 和 ICollection<T>具体类如List<T> ICollection<T> 是比以下更好的devise: ICollection<T> IReadOnlyCollection<T>直接实现IReadOnlyCollection<T> 还请注意,这基本上是一样的问题: 为什么IList<T>实现IReadOnlyList<T> ? 为什么不IDictionary<T>实现IReadOnlyDictionary<T> ?
编者的澄清:当这是最初发布,有两个问题: 如果看起来无关紧要的话,testing性能下降三倍 完成testing所需的时间似乎随机变化 第二个问题已经解决了:随机性只发生在debugging器下运行。 这个问题的其余部分应该被理解为关于上面的第一个要点,并且在VC ++ 2010 Express的发布模式下运行,并且优化“最大化速度”和“优先快速代码”。 评论部分还有一些评论在谈论第二点,但现在可以忽略它们。 我有一个模拟,如果我添加一个简单的if语句到运行实际仿真的while循环中,性能下降大约三倍(我在while循环中运行了大量计算,太阳能的n-body重力系统除了其他东西)即使if语句几乎从未执行: if (time – cb_last_orbital_update > 5000000) { cb_last_orbital_update = time; } time和cb_last_orbital_update都是doubletypes的,并且在主函数的开头定义,if语句也是这样。 通常我也要在那里运行计算,但是如果我删除它们也没有什么区别。 if语句如上所述对性能有相同的影响。 可变time是模拟时间,它在开始时增加了0.001个步骤,所以在第一次执行if语句之前需要很长时间(我还包括打印消息以查看它是否正在执行,但是它不是,或者至less只有当它应该)。 无论如何,即使在仿真的第一分钟内,性能也会下降3倍,但是还没有执行一次。 如果我注释掉这一行 cb_last_orbital_update = time; 那么它又跑得快了,所以这不是检查 time – cb_last_orbital_update > 5000000 无论如何,这绝对是将当前模拟时间写入该variables的简单行为。 另外,如果我将当前时间写入另一个variables而不是cb_last_orbital_update ,则性能不会下降。 所以这可能是一个问题,分配一个新的值,用于检查是否应该执行“if”的variables? 这些都是黑暗中的镜头。 免责声明:我是相当新的编程,并为所有的文字感到抱歉。 我正在使用Visual C ++ 2010 Express,停用stdafx.h预编译头文件function也没有任何区别。 编辑:程序的基本结构。 请注意,在while循环( time += time_interval; )的末尾除了time改变之外, 此外, cb_last_orbital_update只有三次发生:声明/初始化,再加上导致问题的if语句中的两次。 […]