AcArray的使用问题?
<p>我定义了一个动态数组</p><p>typedef AcArray<CString> AcDbLayerNameArray;</p><p></p><p>在使用时,</p><p>AcDbLayerNameArray layerNameArray;</p><p>ACHAR* strLayerName;</p><p>CString str;</p><p>int i;</p><p>for (i=0; i<10; i++){</p><p>// 获得 strLayerName ;</p><p>str.Format(L"%s", strLayerName);<br/>layerNameArray.append(str); </p><p>}</p><p>当i=8时,出错。不知道什么原因?</p><p>另外在AcArray的定义中,有</p><p>template <class T, class R = AcArrayMemCopyReallocator<T> > class AcArray<br/>{<br/>public:<br/> <font color="#000000"><font size="2">AcArray(int initPhysicalLength = 0, <font color="#f70968" size="4">int initGrowLength = 8</font>);</font><br/></font> AcArray(const AcArray<T,R>&);<br/> ~AcArray();<br/>。。。</p><p>}</p><p>好像是layerNameArray的大小被固定在initGrowLength = 8了,没能动态变化?</p><p></p> 本帖最后由 作者 于 2008-4-15 12:38:24 编辑 <br /><br /> <p>你的使用有问题。AcArray是用来放ACAD自己做的类的,通常是AcDbObjectId等等。你要装其他实例,需要对第二个默认参数进行设置。建议不要用AcArray来装String这些东西。没必要,完全可以用STD的类来代替。</p> <p>使用MFC时,定义成typedef AcArray<ACHAR *> AcDbLayerNameArray;可以通过,不过</p><p>因为不能用contains等函数,有点麻烦.看来AcArray仅能定义自己的类和简单的型.其他的还得用CArray.</p> <p>这是CAD提供的Array,你要装别的类型也是可以的,我相信调用contains应该都没有问题,它底层的实现应该还是STD的东西吧。关键你用AcArray传复杂对象,你得告诉它怎么去析构这里面的每个实例,也就是第二个原来默认的参数要进行设置。</p>
页:
[1]