与其他整数类型相比,uint16_t和int64_t有什么特别之处

What is special about uint16_t and int64_t compared to other integer types?

本文关键字:什么 int64 其他 类型 uint16 整数      更新时间:2024-09-23

这个VSTest代码编译得很好,直到我取消注释两行中的任何一行,在这种情况下,我得到

错误C2338测试编写器必须定义ToString<const Q&q>对于您的类std::basic_string<wchar_t,structstd::char_traits<wchar_t>,类std::分配器<wchar_t>gt__cdecl-Microsoft::VisualStudio::CppUnitTestFramework::ToString(const unsigned short&(。InterleavedListMode_VST测试c:\program files(x86(\microsoft visual studio\2017\professional\vc\axiliary\vs\unittest\include\cppunittestassert.h 66

错误C2338测试编写器必须定义ToString<const Q&q>对于您的类std::basic_string<wchar_t,structstd::char_traits<wchar_t>,类std::分配器<wchar_t>gt__cdecl Microsoft::VisualStudio::CppUnitTestFramework::ToString&lt__int64&gt;(const__int64&(。InterleavedListMode_VST测试c:\program files(x86(\microsoft visual studio\2017\professional\vc\axiliary\vs\unittest\include\cppunittestassert.h 66

#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
TEST_CLASS(foo) {
TEST_METHOD(bar) {
Assert::AreEqual((int8_t)1, (int8_t)1);
Assert::AreEqual((uint8_t)1, (uint8_t)1);
Assert::AreEqual((int16_t)1, (int16_t)1);
// Assert::AreEqual((uint16_t)1, (uint16_t)1);
Assert::AreEqual((int32_t)1, (int32_t)1);
Assert::AreEqual((uint32_t)1, (uint32_t)1);
// Assert::AreEqual((int64_t)1, (int64_t)1);
Assert::AreEqual((uint64_t)1, (uint64_t)1);
}
};

我检查了CppUnitTestAssert.h,实际上,缺少这两种类型。例如:

template<> inline std::wstring ToString<bool>                  (const bool& t)                  { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<int>                   (const int& t)                   { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<long>                  (const long& t)                  { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<short>                 (const short& t)                 { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<char>                  (const char& t)                  { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<wchar_t>               (const wchar_t& t)               { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<signed char>           (const signed char& t)           { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<unsigned int>          (const unsigned int& t)          { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<unsigned long>         (const unsigned long& t)         { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<unsigned long long>    (const unsigned long long& t)    { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<unsigned char>         (const unsigned char& t)         { RETURN_WIDE_STRING(t); }
template<> inline std::wstring ToString<std::string>           (const std::string& t)           { RETURN_WIDE_STRING(t.c_str()) ; }
template<> inline std::wstring ToString<std::wstring>          (const std::wstring& t)          { return t; }

添加它们并不难,但为什么它们一开始就不见了?

已关闭的问题:已关闭-不是Bug

"。。。根据进一步的分析,对我们来说,定义";串转换器";对于所有类型(本例中为std::uint16_t(,对于此类场景,我们希望用户将他们的数据转换为基本类型的[一个],这是C++UnitTest Framework支持的">

";此外,即使我们为std::uint16_t定义了一个转换器,它也会失败,出现异常";错误C2766:显式专门化"当使用flag(/Zc:wchar_t-(编译时,因为我们已经为wchar_t定义了转换器,&uint16_t&whcar_t映射到unsigned short,导致上述错误">