我最近更新了我的Visual Studio 2013到更新2 RTM。 现在我的C#文件,导航栏有一个新的下拉项目 ,而不是像过去那样的types和成员 。 “ 项目”下拉菜单占用了宝贵的屏幕房地产。 有没有办法在导航栏中隐藏项目下拉菜单? 看到这个链接的导航栏看起来像一个图片。 更新:我添加了一个C#文件的导航栏的图片。
在C ++中是否合法? 据我所知, Reference有一个微不足道的析构函数,所以它应该是合法的。 但是我认为引用不能合法地反弹……可以吗? template<class T> struct Reference { T &r; Reference(T &r) : r(r) { } }; int main() { int x = 5, y = 6; Reference<int> r(x); new (&r) Reference<int>(y); }
假设我写了 std::vector<T> littleVector(1); std::vector<T> bigVector; bigVector.reserve(100); bigVector = littleVector; 标准是否说bigVector仍然有100个元素保留? 或者,如果我要push_back 99个元素,我会经历内存重新分配吗? 也许它在STL实现之间甚至有所不同。 这是以前在这里讨论的,但没有给出标准参考。
C#是否拥有私有/受保护inheritance的概念,如果不是,为什么? C ++ class Foo : private Bar { public: … }; C# public abstract NServlet class : private System.Web.UI.Page { // error "type expected" } public abstract NServlet class : private System.Web.UI.Page { // error "type expected" } 我正在一个.aspx页面中实现一个“servlet like”的概念,我不希望具体的类能够看到System.Web.UI.Page基础的内部。
编辑2015这个问题和它的答案不再相关。 在C#6出现之前,有一个空传播运算符(?)被提出来,它避免了在这个问题和随后的答案中讨论的hacky-workarounds。 截至2015年,在C#中,您现在应该使用Form.ActiveForm?.ActiveControl?.Name。 我一直在思考在.NET中的空传播问题,这往往导致丑陋,重复的代码,如下所示: 尝试#1通常的代码: string activeControlName = null; var activeForm = Form.ActiveForm; if (activeForm != null) { var activeControl = activeForm.ActiveControl; if(activeControl != null) { activeControlname = activeControl.Name; } } 关于一个Maybe <T> monad,或者使用某种“if not null”扩展方法,已经在StackOverflow上进行了一些讨论: 尝试#2,扩展方法: // Usage: var activeControlName = Form.ActiveForm .IfNotNull(form => form.ActiveControl) .IfNotNull(control => control.Name); // Definition: public static TReturn IfNotNull<TReturn, […]
(当我说STL时,我正在讨论围绕容器,迭代器,algorithm和仿函数的模板库。) 这个问题想到了std::string行为就像一个普通的容器,其中包括begin和end函数(包括迭代器),一个函数的size以及将所有这些函数用于容器/范围通过它们的迭代器(例如transform , sort , find等)。 然而,与此同时,它不是一个容器本身,因为它不适合存储任意数据的容器图片。 另外,它主要通过成员函数(如substr , find_first_of等)对包含的数据进行操作,而真正的容器不会这样做,并让algorithm处理它。 另外, cplusplus参考站点和C ++标准没有将std::string与真实容器一起列出,而是在不同的类别中。 但是,在SGI的STL站点上 , basic_string (以及string typedef)与另一个容器和basic_string引用站点一起提到它属于“容器”类别。 现在我的问题是, string实际上是STL的一部分,还是它本身是一个独特的库? 如果它现在属于STL,是不是和Stepanov开发的原始STL有所不同呢?
我使用gcov来测量我的C ++代码的覆盖范围。 我想达到100%的覆盖率,但受到这样一个事实的阻碍:理论上有一些代码行是不可触发的(这些方法需要被实现但是从来没有被调用过,默认的switch语句分支,等等。)。 每个分支都包含一个assert( false ); 声明,但gcov仍然标志着他们未受打击。 我希望能够告诉gcov忽略这些分支。 有没有办法给gcov这些信息 – 通过注释的源代码,或通过任何其他机制?
在C ++ 17中,实现一个overload(fs…)函数是很简单的,给定任意数量的参数fs…满足FunctionObject ,返回一个新的函数对象 ,其行为类似于fs…的重载。 例: template <typename… Ts> struct overloader : Ts… { template <typename… TArgs> overloader(TArgs&&… xs) : Ts{forward<TArgs>(xs)}… { } using Ts::operator()…; }; template <typename… Ts> auto overload(Ts&&… xs) { return overloader<decay_t<Ts>…>{forward<Ts>(xs)…}; } int main() { auto o = overload([](char){ cout << "CHAR"; }, [](int) { cout << "INT"; }); o('a'); // […]
我坚信使用unit testing是构build大型多平台应用程序的一部分。 我们目前正在计划在单独的项目中进行unit testing。 这有利于保持我们的代码基础清洁。 不过,我认为这样会将testing代码与实施单元分开。 你对这种方法有什么看法,有没有像C ++应用程序的JUnit的工具?
我想要全面了解如何使用ICustomTypeDescriptor,TypeDescriptionProvider,TypeConverter和UITypeEditor来更改PropertyGrid显示和与对象接口的方式。 有人能告诉我这是对的吗,还是我错过了一些重要的概念或观点? 我真的只是想明白为什么和什么时候你会使用每个类。 ICustomTypeDescriptor 在类中全部实现此接口将覆盖类的本地属性,并将其replace为由ICustomTypeDescriptor.GetProperties()返回的PropertyDescriptors。 TypeDescriptionProvider 用于扩展一个类的现有属性 TypeDescriptionProvider通过TypeDescriptionProvider属性附加到类 TypeDescriptionProvider的GetTypeDescriptor()方法返回一个ICustomTypeDescriptor以附加到该types的现有属性。 PropertyGrid将显示通过Reflectionfind的类的属性,以及通过TypeDescriptionProvider添加到类的属性 types转换器 types之间转换 就使用PropetyGrid而言,可以在属性网格中显示/编辑复杂types和基本types之间进行转换。 TypeConverter的GetStandard值方法也可以用来显示propertygrid中可能值的列表 UITypeEditor的 定义一个用于处理复杂types属性的自定义编辑器。 通过属性关联属性。 所以ICustomTypeDescriptor是一个TypeDescription提供程序,用于添加/更改/replace对象的整个属性。 TypeConverter和UITypeEditor应用于各个属性,并控制这些特定属性的接口方式。