这里有一个C++
菜鸟。我正在尝试使用以下 键 行来调整一些代码(这意味着它们不是唯一的,但它们是唯一对此问题重要的代码)。顺便说一句,我在Windows上使用Visual Studio 2010 C ++编译器。
CMap<ATL::CAtlString,LPCTSTR,UINT,UINT> mapForDuplicates; // "dict" definition
ATL::CAtlString strDescription = ... // let's just say it gets set to a value.
UINT nFound = 0; // What is this for???
BOOL bFound = mapForDuplicates.Lookup(strDescription, nFound);
mapForDuplicates[strDescription] = 1;
现在......我真的不想在这里使用UINT
,因为bool
是我真正需要的。但是,我无法弄清楚CMap构造函数的所有参数究竟是什么。使用C#
时,我必须指定的是键的类型和值的类型。 ATL::CAtlString
与LPCSTR
不匹配的事实让我感到困惑。 KEY
,ARG_KEY
,VALUE
和ARG_VALUE
究竟是什么?为什么我需要全部四个,四个都可以不同?感谢。
...
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
class CMap : public CObject
...
注意:我可以在这里使用std::map
(虽然我还没有使用它);唯一不可协商的是ATL::CAtlString
- 我必须使用这种类型。如果您有疑问,请告诉我。
答案 0 :(得分:1)
从类的文档开始= - 这里也有一个示例参考
http://msdn.microsoft.com/en-us/library/s897094z(VS.71).aspx
答案 1 :(得分:1)
IIRC模板的四个args就在那里你可以抛出一个类型并返回另一个(const)类型。它抛出CAtlStrings,但它会回到LPCTSTR。通常你只需要对类型指定相同的两次(例如int,int,float,float为int的地图 - &gt;浮点数)。
Grr,额外的L现在让我感到烦恼,它对于16位Windows来说非常棒,但现在...... PCSTR就是所需要的。 'L'是Windows编程的无用附录。
nFound是从地图中出来的东西,地图映射到UINT所以nFound是UINT。
答案 2 :(得分:0)
顺便说一下,下面的伪样本对我有用。
std::set<CAtlString> setOfDescriptions;
for each(...)
{
CAtlString strDescription = GetDescription();
if (setOfDescriptions.find(strDescription) != setOfDescriptions.end())
{
// Remove a duplicate.
}
setOfDescriptions.insert(strDescription); // Mark as seen.
}