如何为CStrings编写C ++ VS2012 CppUnitTestFramework ToString()模板重载?一定有可能。
编译器说我必须给出编译错误:
error C2338: Test writer must define specialization of ToString<const Q& q> for your class class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __cdecl Microsoft::VisualStudio::CppUnitTestFramework::ToString<class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > >>(const class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > &).
对于其他数据类型,我在我的单元测试代码中添加了类似的内容:
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace Microsoft { namespace VisualStudio { namespace CppUnitTestFramework {
template<> static std::wstring ToString<eNumy>(const eNumy & e) { return ltots(static_cast<long>(e)); }
我尝试添加:
template<> static std::wstring ToString<CString>(const CString & e) { return e.GetBuffer(); }
但这无法编译为const问题:
error C2663: 'ATL::CSimpleStringT<BaseType>::GetBuffer' : 2 overloads have no legal conversion for 'this' pointer
有人有什么主意吗?
我要运行此测试:
CString csTina;
CString csGeoff;
Assert::AreNotEqual(csTina, csGeoff);
答案 0 :(得分:1)
是的,there您拥有:
CString
的功能GetBuffer
未标记为const
功能,因此无法在const CString&
上调用此功能。
多个选项:
const
。GetBuffer
的情况下实现逻辑。const_cast
来获取它。 (不过,建议不要使用 。)CString
转换为std::string
(或std::wstring
)并使用现有功能。