帮忙看看我的代码,map里面放CComBSTR,是否正确?

郑大满 2007-07-24 01:53:03
如下代码是否正确并安全?

const CComBSTR comStr1( L"RWUM" );
const CComBSTR comStr2( L"RWUH" );
const CComBSTR comStr3( L"RWUL" );
map<CAdapt<CComBSTR>, int> m;
m[comStr1] = 1;
m[comStr2] = 2;
m[comStr3] = 3;

if( m.find(comStr1) == m.end())
{
cout << "fail" << endl;
}
else
{
cout << "ok" << endl;
}
...全文
202 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wengch 2007-07-26
  • 打赏
  • 举报
回复
没有这样用过ComBSTR类,不过我感觉应该不会有什么问题,保证全局名字空间干净点估计不会出问题.
wengch 2007-07-25
  • 打赏
  • 举报
回复
我觉得还不如直接包string进去,BSTR只是为了解决字符传输问题,也就是提供给调用者用的.
程序内部没必要使用BSTR,太麻烦,也太恶心人.
郑大满 2007-07-25
  • 打赏
  • 举报
回复
我的关注点是:STL容器和ATL智能包裹类的冲突的问题。因为我的项目中用到了ATL。
我查找了一些资料,了解到CAdapt类的作用就是为了使得:在STL容器中存放ATL智能包裹类 能够正确并安全。
std::list<CComBSTR> --> 从MSDN中可以知道,这样的代码是不行的。
std::vector<CComBSTR>--> 能够编译通过并正确运行,但是推荐这么用:std::vector< CAdapt <CComBSTR> >

atlcomcli.h中对CAdapt的注释如下:
// Class to Adapt CComBSTR and CComPtr for use with STL containers
// the syntax to use it is
// std::vector< CAdapt <CComBSTR> > vect;

希望有经验的兄弟能够share给我一些经验。
郑大满 2007-07-25
  • 打赏
  • 举报
回复
To wengch(J七+一A色本放歌死J):

兄弟,你说的很对阿。只是我做的这个项目已经被这么设计了。
我的开发是基于别的组所开发的一个FrameWork之上的,那个FrameWork是一个很庞大的基于com开发的一个系统。
wengch 2007-07-24
  • 打赏
  • 举报
回复
应该没什么太大问题,BSTR和char*的区别不是太大
Oversense 2007-07-24
  • 打赏
  • 举报
回复
完全可以,不过用string(wstring)可能更好
sms88 2007-07-24
  • 打赏
  • 举报
回复
好危险吧?
healer_kx 2007-07-24
  • 打赏
  • 举报
回复
CComBSTR可以为Key
dadatech 2007-07-24
  • 打赏
  • 举报
回复
能满足operator= 和operator<就可以。
taodm 2007-07-24
  • 打赏
  • 举报
回复
去看《Effective STL》item21,map的key必须满足可排序语意。你得自己分析CAdapt<CComBSTR>是否满足这个要求。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧