我看到一些.NET 2.0代码看起来像这样:
public enum abc : int
{
value1 = 1,
value2 = 2,
value3 = 4
}
Run Code Online (Sandbox Code Playgroud)
等等...
现在我知道标志枚举可以用于位值(如上所述,对吗?)所以你可以做| "或"等等,但不使用它的原因是什么?重写int有什么意义?
如果我设计一个用于选择多个值的枚举,我会使用flags属性而不是覆盖任何东西(我不明白).上述方法是什么网?
谢谢
我一直在努力用引用计数指针替换原始指针,这些指针只暴露底层的const版本.我的目标是减少内存使用(以及不必要地构建和破坏复杂对象所花费的时间),而不是让自己处于任何代码都可以访问它不拥有的内存的情况.我知道引用计数的循环引用问题,但我的代码永远不应该创建这样的情况.
要求const-ness有效,因为我使用的系统中类通常不暴露非const成员,而不是改变对象,你必须在其上调用一个返回由更改产生的新对象的方法.这可能是一种设计模式,但我不知道它的名字.
当我有一个返回指向其类型对象的指针的方法时,我的问题就出现了,有时它本身也是如此.以前它看起来像这样:
Foo * Foo::GetAfterModification( const Modification & mod ) const
{
if( ChangesAnything( mod ) )
{
Foo * asdf = new Foo;
asdf.DoModification( mod );
return asdf;
}
else
return this;
}
Run Code Online (Sandbox Code Playgroud)
我看不出让这个返回智能指针的好方法.天真的方法会是这样的return CRcPtr< Foo >( this )
,但这打破了所有权语义,因为我正在返回以及之前拥有该对象的任何人现在都认为他们拥有所有权但彼此不了解.唯一安全的做法是return CRcPtr< Foo >( new Foo( *this ) )
,但是这违背了我限制不必要的内存使用的意图.
有没有办法安全地返回智能指针而不分配任何额外的内存?我怀疑是没有.如果有,如果对象已在堆栈上分配,它将如何工作? 这个问题看似相关,但不一样,因为他可以让他的函数将原始指针作为参数,因为他正在使用boost库.
作为参考,我的自制智能指针实现如下.我相信它可能会更强大,但它比依赖boost或tr1在任何地方都可用更便携,并且直到这个问题它对我来说都很好.
template <class T>
class CRcPtr
{
public:
explicit CRcPtr( T * p_pBaldPtr )
{
m_pInternal = p_pBaldPtr;
m_iCount = new unsigned short( 1 …
Run Code Online (Sandbox Code Playgroud) 是否存在与.Net中的重载方法相关的成本?
所以,如果我有3个方法,如:
Calculate (int)
Calculate (float)
Calculate (double)
Run Code Online (Sandbox Code Playgroud)
并且这些方法在运行时"动态地"调用,基于传递给Calculate方法的内容,这个重载决策的成本是多少?
或者我可以有一个Calculate并在方法体中产生差异,但我认为这将需要该方法在每次调用时评估类型.
是否有更好的方法/设计来解决这个问题,可能没有开销?或者更好的是,处理这类案件的最佳做法是什么?我想拥有相同的类/方法名称,但行为不同.
编辑:谢谢大家.如果它有任何不同,Jusdt有一件事.我想知道你有这些方法的DLL和用C#编写的程序,它允许用户将这些方法添加为UI项(不指定类型).所以用户添加UI项目Calculate(5),然后计算(12.5)等,C#app执行此操作,是否仍然没有开销?
假设我有一个名为choice
它的变量等于2.我如何访问变量的名称?相当于的东西
In [53]: namestr(choice)
Out[53]: 'choice'
Run Code Online (Sandbox Code Playgroud)
用于制作字典.有一个很好的方法来做到这一点,我只是错过了它.
编辑:
因此,这样做的原因.我正在运行一些数据分析的东西,我在程序中调用了多个参数,我想在运行时调整或不调整.我读了我在上一次运行中使用的参数,从.config文件格式化为
filename
no_sig_resonance.dat
mass_peak
700
choice
1,2,3
Run Code Online (Sandbox Code Playgroud)
当提示输入值时,将显示先前使用的值,空字符串输入将使用先前使用的值.
我的问题是因为在写字典时已经扫描了这些值.如果需要一个参数,我运行get_param
访问文件并找到参数.
我想我会通过阅读来避免这个问题.config
提交一次并从中生成字典.我原本避免了这个......我不再记得的原因.更新我的代码的完美情况!
我有一个绑定到DataTable的DataGridView。
DataTable是所有数值。
要求DataGridView中的每n行中都包含文本,而不是数字值(以便为用户在视觉上分隔各个部分)。
绑定后,我很乐意将此文本数据放入DataTable或DataGridView中,但是我看不到任何一种将文本数据放入其中的方法,因为这两种列格式都需要数字数据-我得到了“都将一个字符串放在一个十进制“错误中。
有什么想法如何更改DataTable或DataGridView中特定行或单元格的格式?
我知道boost中的范围迭代器,对于这个引用,似乎应该有一种简单的方法来做我想要的,但这对我来说并不明显.
假设我想表示一个数字范围,0到100(包括或不包括),比方说range(0,100)
.我想做的事情如下:
for_each(range<int>(0,100).begin(), range<int>(0,100).end(), do_something);
Run Code Online (Sandbox Code Playgroud)
哪里do_something
是仿函数.这个迭代器不应该有一个下面的向量或类似的东西的开销,但只提供一个整数序列.这是否可以通过boost中的范围实现来实现?可以使用普通的标准STL迭代器吗?
我几乎在Objective-C中理解简单的引用计数/内存管理,但是我在使用下面的代码时遇到了困难.我正在发布mutableDict(在下面的代码中注释),它在我的代码中造成了不利的行为.如果我让内存泄漏,它会按预期工作,但这显然不是这里的答案.;-)你们中任何一个更有经验的人是否都能够指出我正确的方向,因为我可以重新编写任何一种方法来更好地处理我的内存占用?主要是我如何管理NSMutableDictionary*mutableDict,因为这是罪魁祸首.我想了解这个问题,而不仅仅是复制/粘贴代码 - 所以一些评论/反馈是理想的.谢谢大家.
- (NSArray *)createArrayWithDictionaries:(NSString *)xmlDocument
withXPath:(NSString *)XPathStr {
NSError *theError = nil;
NSMutableArray *mutableArray = [[[NSMutableArray alloc] init] autorelease];
//NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] init];
CXMLDocument *theXMLDocument = [[[CXMLDocument alloc] initWithXMLString:xmlDocument options:0 error:&theError] retain];
NSArray *nodes = [theXMLDocument nodesForXPath:XPathStr error:&theError];
int i, j, cnt = [nodes count];
for(i=0; i < cnt; i++) {
CXMLElement *xmlElement = [nodes objectAtIndex:i];
if(nil != xmlElement) {
NSArray *attributes = [NSArray array];
attributes = [xmlElement attributes];
int attrCnt = [attributes count];
NSMutableDictionary *mutableDict …
Run Code Online (Sandbox Code Playgroud) 在SQL Server 2008标准版中,您可以在SQL Server 2008 Web Edition中执行哪些操作?
我已经看过微软的功能列表了,但是从一个非常实用的角度来看,我想要遇到限制.
我制作了一个模式来使用他们的原型创建和扩展html元素.这就像非浏览器中的魅力一样.示例代码可以在@jsbin找到(参见页面源代码)
这种模式的优点应该是速度(方法在元素原型链中,因此它们被引用一次).你猜对了:IE没有去.在IE <8中,html元素的原型是隐藏/不可访问的,因此对于您创建的每个元素,您必须再次引用非标准方法(如果您密集使用该模式,请留下很多指针).我在网上搜索了解决方案,但只找到了复杂的解决方法.有没有真的没有办法在IE浏览器访问HTML元素的原型?
我正在使用下面的代码来读取包含外来字符的文本文件,该文件是ANSI编码的,在记事本中看起来很好.下面的代码不起作用,当读取文件值并在数据网格中显示字符显示为正方形时,其他地方是否会出现其他问题?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))
Run Code Online (Sandbox Code Playgroud)
谢谢
更新1:我已经尝试了所有编码System.Text.Encoding
.并且都无法正确显示文件.
更新2:我已经将文件编码(重新保存文件)更改为unicode并使用,System.Text.Encoding.Unicode
并且它工作得很好.那么为什么记事本读得正确呢?为什么没有System.Text.Encoding.Unicode
读取ANSI文件?
c# ×4
.net ×2
c++ ×2
boost ×1
cocoa ×1
cocoa-touch ×1
datagridview ×1
dictionary ×1
dom ×1
encoding ×1
enums ×1
ios ×1
iphone ×1
iterator ×1
javascript ×1
methods ×1
objective-c ×1
overloading ×1
python ×1
range ×1
sql ×1
sql-server ×1
stl ×1
this ×1
variables ×1
winforms ×1