gpt4 book ai didi

c++ - CppUnitTestFramework 的 CString ToString() 模板重载

转载 作者:行者123 更新时间:2023-11-28 04:20:51 31 4
gpt4 key购买 nike

如何为 CString 编写 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> > > &).

Noramlly 对于其他数据类型,我将类似的内容添加到我的单元测试代码中:

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);

最佳答案

是的,there你拥有了它:CString 的函数GetBuffer 没有标记为const 函数,因此您不能在const CString& 上调用此函数。

多个选项:

  • 从重载中删除 const
  • 在没有 GetBuffer 的情况下实现逻辑。
  • 执行const_cast 获取它。 (虽然推荐)。
  • 只需将 CString 转换为 std::string(或 std::wstring)并使用现有功能。

关于c++ - CppUnitTestFramework 的 CString ToString() 模板重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55473762/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com