首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddObject in TStringList

AddObject in TStringList
EN

Stack Overflow用户
提问于 2014-05-29 08:02:43
回答 3查看 2.3K关注 0票数 0

这是我第一次在AddObject 6的TStringList中使用C++方法,但是我不能向对象列表中添加一个整数。我当然是通过铸造不同的类型来做的。但这不是我想要的。请帮助我做的更简单,为什么对象必须是Tobject*在对象列表中,这是我的简单程序.

代码语言:javascript
复制
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused

int main(int argc, char* argv[])
{
    int r=random(100+1);
    TStringList *mylist=new TStringList;
    mylist->AddObject("r",(TObject *)r);
    int i=mylist->IndexOf("r");
    int a=(int)(mylist->Objects[i]);
    cout<<a<<endl;
    getch();
    return 0;
} 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-29 08:15:20

为什么对象必须是Tobject*

因为Borland的VCL设计。

mylist->AddObject("r",(TObject *)r);

不要这样做,因为不能保证TStringList不会在AddObject中调用某些TObject*方法。例如,它可以调用objectName()incrementReference() (我知道,没有TStringList::incrementReference(),但这只是一个例子)。

你所需要的就是std::地图

代码语言:javascript
复制
#include <map>

int main()
{
    int r=random(100+1);
    std::map< AnsiString, int > myList;
    myList[ "r" ] = r;
    int a = myList[ "r" ];
}
票数 0
EN

Stack Overflow用户

发布于 2014-05-30 02:27:50

std::map或其他合适的容器代替,如:

代码语言:javascript
复制
#pragma hdrstop

#include <iostream.h>
#include <conio.h>
#include <map>

#pragma argsused

int main(int argc, char* argv[])
{
    int r = random(100+1);
    std::map<std::string, int> mylist;
    mylist["r"] = r;
    int a = mylist["r"];
    cout << a << std::endl;
    getch();
    return 0;
} 
票数 1
EN

Stack Overflow用户

发布于 2014-05-29 08:25:33

很难看,但演员们会做得很好的。如果您必须使用TStringList,那么实际的方法就是坚持这种方法。

如果需要,可以将包含“int‘s”的TObject派生包装器添加到另一个向量并使用这些指针,但它需要更多代码来维护第二个列表,更容易出错,而且速度要慢得多。

或者,新建这些包装器并将它们添加到字符串列表中,然后手动管理对象的删除。这很容易出错。

如果可能的话,最好的方法可能是放弃TStringList。使用struct/class或std::结对和std::vector std::deque。

例如:

代码语言:javascript
复制
typedef std::pair<AnsiString, int> MyValue;
typedef std::vector<MyValue> MyValueList;

MyValueList list;
list.push_back(MyValue("hello", 1));

AnsiString const& s = list[0].first;
int i = list[0].second;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23928572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档