Tag: C#的

用cmake处理头文件的依赖关系

我正在一个小型的C ++项目上使用CMake,到目前为止,它的工作很好…一个扭曲:x 当我更改头文件时,通常需要重新编译一些源文件(包括直接或间接包含的文件),但似乎cmake只检测到一些源文件需要重新编译,导致损坏的状态。 我可以通过清除项目并从头开始重build来解决这个问题,但是这样规避了使用make实用程序的目标:只重新编译需要的内容。 所以,我想我做错了什么。 我的项目非常简单: 一个顶级目录,所有资源都坐在那里,主CMakeLists.txt位于那里 一个包含所有公共头文件的“include”目录(在各种子目录中) 一个源文件的所有子目录的“src”目录,src CMakeLists.txt位于那里 每个“src”目录下的子目录都有一个CMakeLists.txt文件 主目录有: cmake_minimum_required(VERSION 2.8) project(FOO) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) # Compiler Options set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++0x -Wall -Wextra -Werror") include_directories($(FOO_SOURCE_DIR)/include) add_subdirectory(src) “src”目录: add_subdirectory(sub1) add_subdirectory(sub2) add_subdirectory(sub3) add_subdirectory(sub4) add_executable(foo main.cpp) target_link_libraries(foo sub1 sub2 sub3 sub4) 其中, sub4取决于sub3 ,取决于sub1取决于sub1 和一个子目录(sub3)的例子: set(SUB3_SRCS File1.cpp File2.cpp File3.cpp File4.cpp File5.cpp File6.cpp ) add_library(sub3 ${SUB3_SRCS}) […]

什么是折叠一组潜在重叠范围的好的通用algorithm?

我有一个方法来获得这个类的一些对象 class Range<T> { public T Start; public T End; } 在我的情况下, T是DateTime ,但为简单起见使用int 。 我想要一个方法,将这些范围折叠成覆盖相同“区域”但不重叠的方法。 所以,如果我有以下范围 1至5 3至9 11到15 12至14 13到20 该方法应该给我 1至9 11至20 猜猜这会被称为工会? 我想象的方法签名可能看起来像这样: public static IEnumerable<Range<T>> Collapse<T>( this IEnumerable<Range<T>>, IComparable<T> comparer) { … } 我在这里看到了一些类似的其他问题,但我还没有find一个这样的实现。 这个答案和其他一些相同的问题的答案描述algorithm,但我不太清楚,如果我理解的algorithm。 不是特别擅长实现algorithm,所以我希望这里有人能帮助我。

是variables赋值和读取primefaces操作吗?

我无法在文件中find任何提及… 是分配给一个双重(或任何其他简单的types,包括布尔值)从线程的angular度来看一个primefaces操作? double value = 0; public void First() { while(true) { value = (new Random()).NextDouble(); } } public void Second() { while(true) { Console.WriteLine(value); } } 在这个代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用。 如果第二个方法在赋值给另一个线程中的variables的时候得到了执行的结果,那么第二个方法会得到一个乱码值吗 我不在乎是否收到旧的值,只有接收到一个有效的值才是重要的(不是8个字节中有2个是设置的)。 我知道这是一个愚蠢的问题,但我想确定,因为我不知道CLR如何设置variables。

为什么Guid.ToByteArray()以这种方式sorting字节?

当您在.NET中以GUID调用ToByteArray() ,与GUID的string表示forms相比,生成的数组中的字节顺序不是您所期望的。 例如,对于以string表示的以下GUID: 11223344-5566-7788-9900-aabbccddeeff ToByteArray()的结果是这样的: 44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF 请注意,前四个字节的顺序是相反的。 字节4和5交换,字节6和7交换。 但最后的8个字节与它们在string中的表示顺序相同。 我明白这是发生。 我想知道的是为什么.NET这样处理它。 作为参考,你可以在这里和这里看到一些关于这个(不正确的归因于Oracle数据库)的讨论和困惑。

如何防止诸如Zalgo文本的变音符号

上图中的人物是在几个月前由计算机安全专家MikkoHyppönen啾啾 ,他以计算机病毒和TED计算机安全方面的工作而闻名。 关于这个,我只会发表一个形象,但你明白了。 这显然不是你想要传播你的网站,并吓坏游客。 经过进一步的检查,这个angular色似乎是一个泰国字母组合的超过87个变音符号(有甚至是一个限制?!)。 这让我想到安全性,本地化以及如何处理这种input。 我的search引导我在Stack上提出这个问题 ,而Michael Kaplan则发表了一篇关于剥离符号的博客文章。 在这个例子中,他演示了如何将一个string分解为它的“基本”字符(为简洁起见,在这里简化): StringBuilder sb = new StringBuilder(); foreach (char c in "façade".Normalize(NormalizationForm.FormD)) { if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark) sb.Append(c); } Response.Write(sb.ToString()); // facade 我可以看到这在某些情况下会是有用的,但是在用户input方面,它将删除所有的变音符号。 正如卡普兰指出的那样,删除某些语言的变音符号可以完全改变这个词的含义。 这引出了一个问题: 如何在用户input/输出中允许一些变音符号,但排除其他极端情况,如MikkoHyppönen的人物angular色?

debugging器不会在asynchronous方法中打破/停止exception

当一个debugging器连接到一个.NET进程时,它通常会在引发未处理的exception时停止。 但是,当你在一个async方法,这似乎不工作。 我以前尝试过的场景在以下代码中列出: class Program { static void Main() { // Debugger stopps correctly Task.Run(() => SyncOp()); // Debugger doesn't stop Task.Run(async () => SyncOp()); // Debugger doesn't stop Task.Run((Func<Task>)AsyncTaskOp); // Debugger stops on "Wait()" with "AggregateException" Task.Run(() => AsyncTaskOp().Wait()); // Throws "Exceptions was unhandled by user code" on "await" Task.Run(() => AsyncVoidOp()); Thread.Sleep(2000); } […]

编译单声道缺less的默认.NET库 – System.Object没有定义或导入

我已经在OS X Mavericks上编译了mono,按照下面的指南: http : //www.mono-project.com/docs/compiling-mono/mac/ 现在,当我使用xbuild编译我的应用程序时,出现以下错误: CSC: error CS0518: The predefined type `System.Object' is not defined or imported CSC: error CS0518: The predefined type `System.ValueType' is not defined or imported CSC: error CS0518: The predefined type `System.Attribute' is not defined or imported CSC: error CS0518: The predefined type `System.Int32' is not defined or imported […]

C#,不变性和公共只读字段

我曾经在很多地方看过,公开地公开这些内容并不是一个好主意,因为如果你以后想改变属性,你将不得不重新编译所有使用你的类的代码。 但是,在不可变类的情况下,我不明白为什么你需要改变属性 – 毕竟你不会为逻辑添加逻辑。 任何想法,我错过了什么? 差别的例子,对于那些比文本更容易阅读代码的人:) //Immutable Tuple using public readonly fields public class Tuple<T1,T2> { public readonly T1 Item1; public readonly T2 Item2; public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; } } //Immutable Tuple using public properties and private readonly fields public class Tuple<T1,T2> { private readonly T1 _Item1; […]

C#内部接口与内部实现

我碰到了一些我不太了解的东西。 我有一个项目,我有一个内部的接口。 实现该接口的类也是内部的。 在接口的实现中,我把所有实现的成员都放在内部。 我没有做一个明确的实施。 我有两个接口和两个类来实现这些工作正常的接口。 它看起来像这样: internal interface IA { void X(); } 接着 internal class CA : IA { internal void X() { … } } 这对于上述两个类来说工作得很好。 但是当我试图用另一个接口和类来做到这一点时,这是行不通的。 事实上,对于上面的例子,我得到的错误: “WindowsFormsApplication1.CA”不实现接口成员“WindowsFormsApplication1.IA.X()”。 'WindowsFormsApplication1.CA.X()'不能实现一个接口成员,因为它不公开。 我意识到我可以公开的方法或做一个明确的实现(并省略内部和公共修饰符),但我只是困惑,为什么它与两个类的工作,但我似乎无法复制它在任何地方。 对代码进行一些处理(因为它是保密的),这是我的项目中真正起作用的代码之一。 internal interface IScanner { void SetHardware(Hardware hardware); void Start(); void PauseScan(); void ResumeScan(); void Stop(); bool InScan { get; } […]

我可以使用模板别名作为模板模板参数吗?

我可以使用模板别名作为模板模板参数吗? template <template <typename…> class> struct foo {}; template <typename T> using simple_ptr = std::unique_ptr<T>; foo<std::unique_ptr> a; // this doesn't work, std::unique_ptr has two parameters foo<simple_ptr> b; // does this work?