2009-12-15 35 views
1

Microsoft提供的CAdapt類是爲了使用類覆蓋STL容器中的運算符地址(operator&)。 MSDN有此說關於使用CAdapt哪些STL容器需要使用CAdapt?

通常情況下,你會使用CAdapt當你想存儲在STL容器CComBSTRCComPtrCComQIPtr,或者_com_ptr_t對象,如list

到我quesiton:

什麼是與CAdapt應使用STL容器的完整列表?

如果容器包含一個鍵/值對(如map)請指定是否需要使用鍵或值CAdapt

回答

5

什麼是CAdapt應該使用的STL容器的完整列表?

無。實現應承擔運營&過載,並且使用正確的表達&reinterpret_cast<char&>(obj)

現在,有一個問題,你沒有問:

我的VC++ STL實現不同意。它確實提供了CAdapt作爲解決方法。什麼是CAdapt應該使用的容器的完整列表?

頂我的頭,我一天vector<T>(它們存儲爲一個T[]所以合理需要對他們的算術)和deque(它們存儲爲多個較小T[]如此的同樣是這個道理)。 list,map,set,multiset和multimap都在節點上工作,所以它們自己已經包裝了每個對象。

+1

不包括使用代理對象的矢量。 – KitsuneYMG 2009-12-15 15:26:23

+0

'&reinterpret_cast '定義在任何對象上嗎? – Motti 2009-12-16 08:58:12

+1

@Motti:是的,這個想法來自Jens Maurer的ISO C++ WG論文N1324,以響應CWG DR273('offsetof'有同樣的問題)。 – MSalters 2009-12-16 09:41:29

2

documentation另一件事:

適配器類CAdapt因爲很多容器類(如STL容器類)希望能夠獲得它們所包含的對象的使用-的地址的地址是非常有用的operator.strong文本。

我不認爲你會找到有此要求的容器列表。這聽起來像實施依賴於我。