Tag: C#的

在逗号分隔列表中使用`void()`?

当我看到这个时,我正在查看其他人编写的一段代码: a(), void(), b(); 其中a和b都是用户定义的模板类的实例,通过重载operator()来返callback用实例本身,该模板类似于函数。 class级的一部分: template <typename T> class SomeClass{ public: SomeClass& operator()(void); const SomeClass& operator()(void) const; } 这两个重载的返回语句如下: template <typename T> SomeClass<T>& SomeClass<T>::operator()(void){ // do stuff return *this; } template <typename T> const SomeClass<T>& SomeClass<T>::operator()(void) const{ // do stuff return *this; } 他们之间的void()是做什么的? 我觉得很奇怪

在Visual Studio 2005/2008中实现接口时删除自动#region /#endregion标记

当用户使用“实现Inteface X”上下文菜单function时,插入的代码被a包围 #region [interfacename] Members #endregion 对。 我总是最终删除这个,有没有办法我可以永久closures它? 我已经通过片段目录快速search,但不知道这是否是正确的地方。 有我pp_region.snippet,我想我可以修改,但我有这种感觉,将完全closures#region /#endregion。 我以为我会问我在这之前,我会去重新安装VS …

.NET 4.0中的合作和变体错误

一些奇怪的行为与C#4.0共同支持和反对支持: using System; class Program { static void Foo(object x) { } static void Main() { Action<string> action = _ => { }; // C# 3.5 supports static co- and contravariant method groups // conversions to delegates types, so this is perfectly legal: action += Foo; // since C# 4.0 much better supports co- and […]

我如何以编程方式检出项目以在TFS中进行编辑?

我正在使用TFS 2010处理在源代码控制下的实用程序处理文件。 如果一个项目还没有签出编辑,我得到一个exception,什么是绝对可预测的,因为文件处于只读模式。 有什么办法检出文件? PS我想要的东西编程,而不是Process.Start("tf.exe", "…"); 如果这是适用的。

不相关的指针的平等比较可以评估为真?

关于==和!=运算符的C标准的 6.5.9节陈述如下: 2以下情况之一应为: 两个操作数都有算术types; 两个操作数都是指向兼容types的合格版本或非限定版本的指针; 一个操作数是一个指向对象types的指针,另一个是指向合格或不合格版本的void的指针; 要么 一个操作数是一个指针,另一个是一个空指针常量。 … 6 两个指针比较相等当且仅当两者都是空指针,都是指向同一个对象的指针(包括一个指向一个对象和一个子对象的指针)或者函数,都指向一个指向同一个对象的最后一个元素数组对象,或者一个指针指向一个数组对象的末尾,另一个指向不同数组对象的起始位置,该指针恰好紧跟地址空间中的第一个数组对象。 109) 7对于这些运算符而言, 指向不是数组元素的对象的指针的行为与指向长度为1的数组的第一个元素的指针相同,该对象的types是元素types。 脚注109: 109) 两个对象可能在内存中相邻,因为它们是大型数组中相邻的元素或结构的相邻成员之间没有填充,或者因为实现select将它们放置,即使它们不相关 。 如果之前的无效指针操作(如访问数组边界外)产生未定义的行为,后续比较也会产生未定义的行为。 这似乎表明您可以执行以下操作: int a; int b; printf("a precedes b: %d\n", (&a + 1) == &b); printf("b precedes a: %d\n", (&b + 1) == &a); 这应该是合法的,因为我们正在使用地址一个元素超过数组的末尾(在这种情况下是单个对象作为大小为1的数组对待),而不需要对其进行解引用。 更重要的是,如果一个variables紧跟在另一个variables的后面,那么这两个语句中的一个将被要求输出1 。 但是,testing似乎并没有解决这个问题。 鉴于以下testing程序: #include <stdio.h> struct s { int a; int […]

C ++ 11智能指针语义

我已经使用了几年的指针,但是我最近才决定转换到C ++ 11的智能指针(即独特,共享和弱)。 我对它们做了一些相当的研究,这些是我绘制的结论: 独特的指针是伟大的。 他们pipe理自己的记忆,并像原始指针一样轻量级。 尽可能优先于原始指针的unique_ptr。 共享指针是复杂的。 由于引用计数,它们有很大的开销。 通过const引用传递它们,或者遗憾你的方法的错误。 他们不是邪恶的,但应该谨慎使用。 共享指针应该拥有自己的对象; 当不需要所有权时使用弱指针。 locking一个weak_ptr具有与shared_ptr拷贝构造函数相同的开销。 继续忽略auto_ptr的存在,现在已经废弃了。 所以,考虑到这些原则,我着手修改我的代码库,以利用我们新的shiny的智能指针,完全打算尽可能多地指明原始指针。 然而,我很困惑,关于如何最好地利用C ++ 11智能指针。 举个例子,假设我们正在devise一个简单的游戏。 我们决定将一个虚构的Texture数据types加载到一个TextureManager类中是最佳的。 这些纹理是复杂的,所以将它们按价值传递是不可行的。 此外,让我们假设游戏对象需要特定的纹理,取决于它们的对象types(即汽车,船等)。 在此之前,我会将纹理加载到一个向量(或者像unordered_map这样的其他容器)中,并在每个相应的游戏对象中存储指向这些纹理的指针,以便在需要渲染时可以引用它们。 我们假设纹理保证比他们的指针长。 那么我的问题就是如何在这种情况下最好地利用智能指针。 我看到几个选项: 将纹理直接存储在容器中,然后在每个游戏对象中构造一个unique_ptr。 class TextureManager { public: const Texture& texture(const std::string& key) const { return textures_.at(key); } private: std::unordered_map<std::string, Texture> textures_; }; class GameObject { public: void set_texture(const Texture& texture) […]

是否使用std :: array <T,N>导致代码膨胀?

我曾经在几个地方看到过推荐使用std::array在C ++中使用C风格的数组,声称这是一个更好,更安全的替代scheme,没有开销。 看到: 标准的容器数组没有超出它所需的元素的空间开销,[…]。 换句话说,它非常像一个没有问题的内置数组。 ( C ++ 11 FAQ ) 然而,据我所知,作为一个模板容器, 将会有一个开销,只要程序大小,因为它会生成代码为每个不同的Narrays是实例。 假设我的程序在不同的地方使用了std::array ,有N个不同的整数,这会导致代码臃肿吗? 这可以忽略不计吗? 我应该担心这一般的非types模板参数吗?

sizeof(空结构)和sizeof(空数组结构)之间的区别?

我有两个结构定义如下: struct EmptyStruct{ }; struct StructEmptyArr{ int arr[0]; }; int main(void){ printf("sizeof(EmptyStruct) = %ld\n", sizeof(EmptyStruct)); printf("sizeof(StructEmptyArr) = %ld\n", sizeof(StructEmptyArr)); return 0; } 在Ubuntu 14.04,x64上用gcc(g ++)4.8.4编译。 输出(对于gcc和g ++): sizeof(EmptyStruct) = 1 sizeof(StructEmptyArr) = 0 我可以理解为什么sizeof(EmptyStruct)等于1但不明白为什么sizeof(StructEmptyArr)等于0 。 为什么两者之间有差异?

使用JSON.NET将异构JSON数组反序列化为协变List <>

我有一个JSON数组包含具有不同属性的不同types的对象。 其中一个属性称为“types”,并确定数组项目的types。 这里是我的数据的一个例子: [{ type : "comment", text : "xxxx" }, { type : "code", tokens : [{ type : "ref", data : "m" }, { type : "operator", data : "e" } ] }, { type : "for", boundLocal : { type : "local", name : "i", kind : "Number" }, upperBound : { […]

创build一个文件,如果一个不存在 – C

我希望我的程序打开一个文件,如果它存在,或者创build文件。 我想下面的代码,但我得到一个debugging断言freopen.c。 我会使用fclose更好,然后立即打开吗? FILE *fptr; fptr = fopen("scores.dat", "rb+"); if(fptr == NULL) //if file does not exist, create it { freopen("scores.dat", "wb", fptr); }