我的代码中有一个使用std::basic_string<HANDLE>
的循环,然后像这样等待:
DWORD dwWaitResult = WaitForMultipleObjects((DWORD)handles.size(),
handles.data(),
FALSE, POLL_INTERVAL_MS);
正常工作但是当我打开/ W4和/ analyze时,Visual C ++ 2008会发出以下警告(为简洁起见减少并包装):
iosfwd(266) : warning C6001: Using uninitialized memory '*_First'
iosfwd(262) : while compiling class template member function
'HANDLE *std::char_traits<_Elem>::assign(_Elem *,size_t,_Elem)'
with [ _Elem=HANDLE ]
xstring(2155) : see reference to class template instantiation
'std::char_traits<_Elem>' being compiled
with [ _Elem=HANDLE ]
xstring(2148) : while compiling class template member function
'void std::basic_string<_Elem>::_Tidy(bool,unsigned int)'
with [ _Elem=HANDLE ]
.\MyCode.cpp(231) : see reference to class template instantiation
'std::basic_string<_Elem>' being compiled
with [ _Elem=HANDLE ]
iosfwd(222) : warning C6001: Using uninitialized memory '*_First1'
iosfwd(216) : while compiling class template member function
'HANDLE *std::char_traits<_Elem>::_Copy_s
(_Elem *,size_t,const _Elem *,size_t)'
with [ _Elem=HANDLE ]
问题:
char
或wchar_t
)是否合法?#pragma warning(disable)
需要证明理由。考虑到Boost已经出局,我们将获得额外的荣誉,并且我们仅限于Visual C ++ 2008中的STL实现;允许TR1的Visual C ++位。
答案 0 :(得分:6)
使用std :: vector而不是试图将那个方形塞子塞进圆孔中有什么不对?
答案 1 :(得分:4)
是的,如果您为类型提供class traits
的模板专精。
提供您的专业class traits
。 (class std::basic_string
)的第二个模板参数。
是的。但您是否考虑过使用std::vector
代替std::basic_string
? (它没有提供字符串辅助函数的特征模板参数,例如比较)
答案 2 :(得分:2)
请注意,std::basic_string
永远不能保证是连续的记忆,WaitForMultipleObjects
永远不会知道。我强烈建议使用矢量。
答案 3 :(得分:0)
您似乎需要为HANDLE类型提供char_traits模板的专业化。