我目前正在处理一些日志代码,这些日志代码应该包含关于调用函数的信息。 这应该是相对容易的,标准的C ++有一个type_info类。 这包含typeid'd类/函数/等的名称。 但是它被破坏了 这不是很有用。 即typeid(std::vector<int>).name()返回St6vectorIiSaIiEE 。 有没有一种方法可以从中产生有用的东西? 就像上面例子中的std::vector<int>一样。 如果它只适用于非模板类,那也可以。 解决scheme应该为gcc工作,但是如果我可以移植它将会更好。 这是为了logging,所以它不是很重要,它不能被closures,但它应该有助于debugging。
我如何防止包含头文件两次? 问题是我包括 在MyClass.h中 ,然后我在很多文件中包含了MyClass.h ,所以它包含多次,并且会出现重定义错误。 如何预防? 我使用#pragma而不是包括守卫,我想这很好。 MyClass.h: // MyClass.h #pragma once #include <winsock2.h> class MyClass { // methods public: MyClass(unsigned short port); virtual ~MyClass(void); }; 编辑:几个我得到的错误 c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : see previous definition of 'AF_IPX' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(124) : warning C4005: 'AF_MAX' : macro […]
我想XML序列化具有(其他) IModelObject (这是一个接口)types的属性的对象。 public class Example { public IModelObject Model { get; set; } } 当我尝试序列化这个类的对象时,我收到以下错误: “由于它是一个接口,所以不能序列化Exampletypes的Example.Model”。 我明白,问题是一个接口不能被序列化。 但是,具体的Model对象types在运行时才是未知的。 用一个抽象的或具体的typesreplaceIModelObject接口,并使用XMLIncludeinheritance是可能的,但似乎是一个丑陋的解决方法。 有什么build议么?
如何在SQL Server中创build一个类似于where的子句? 我自己做了一个,但任何人都可以改善这一点? public List<State> Wherein(string listofcountrycodes) { string[] countrycode = null; countrycode = listofcountrycodes.Split(','); List<State> statelist = new List<State>(); for (int i = 0; i < countrycode.Length; i++) { _states.AddRange( from states in _objdatasources.StateList() where states.CountryCode == countrycode[i].ToString() select new State { StateName = states.StateName }); } return _states; }
boost::hash_combine模板函数引用一个散列(称为seed )和一个对象v 。 根据文档 ,它结合了seed和v的散列 seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); 我可以看到这是确定性的。 我明白为什么使用XOR。 我敢打赌,除了有助于将相似的值映射到很远的地方之外,所以探测哈希表不会中断,但是有人能解释一下这个魔术常量是什么吗?
正如你可能知道的那样,C#中的数组实现IList<T>以及其他接口。 但不知何故,他们这样做没有公开实施IList<T>的Count属性! 数组只有一个Length属性。 这是C#/。NET打破它自己的接口实现规则的公然例子,或者我错过了什么吗?
在Linux内核代码中,我发现了以下我无法理解的东西。 struct bts_action { u16 type; u16 size; u8 data[0]; } __attribute__ ((packed)); 代码在这里: http : //lxr.free-electrons.com/source/include/linux/ti_wilink_st.h 什么是零元素的数据数组的需求和目的?
至less有一些C预处理器允许你通过将一个类似macros的macros传递给另一个对其进行string化的macros来对其进行string化,而不是通过它的名称: #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */ 这里的例子用例。 这是行不通的,至less在GCC和Clang(都是-std=c99 ),但我不确定它是如何在C标准方面的工作。 这种行为是否由C99保证? 如果是这样,C99如何保证它? 如果不是,行为从C定义到GCC定义的哪一点?
有人可以告诉我为什么下面的代码不工作。 数据保存到csv文件中,但数据不分离。 它全部存在于每行的第一个单元格内。 StringBuilder sb = new StringBuilder(); foreach (DataColumn col in dt.Columns) { sb.Append(col.ColumnName + ','); } sb.Remove(sb.Length – 1, 1); sb.Append(Environment.NewLine); foreach (DataRow row in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { sb.Append(row[i].ToString() + ","); } sb.Append(Environment.NewLine); } File.WriteAllText("test.csv", sb.ToString()); 谢谢。
我有一个Visual Studio 2005 C ++程序在发行模式下的运行方式与在debugging模式下的运行方式不同。 在释放模式下,发生(明显的)间歇性崩溃。 在debugging模式下,它不会崩溃。 发布版本的工作与debugging版本不同的原因是什么? 还值得一提的是我的程序相当复杂,并使用多个第三方库进行XML处理,消息代理等。 提前致谢!