C++ MS2015 CppUnitTestFramework:为模板类重载ToString
我正在使用可变定点精度实现复杂的算法。 我定义了:C++ MS2015 CppUnitTestFramework:为模板类重载ToString,c++,unit-testing,visual-studio-2015,C++,Unit Testing,Visual Studio 2015,我正在使用可变定点精度实现复杂的算法。 我定义了: template <int N, int M> class FixedPoint {...} 模板类固定点{…} 以及: 模板类复合体{…} 现在我想为不同的定点精度运行单元测试。例如,Complex,Complex,Complex,等等 复杂表示法非常简单。你只需要显示实部和虚部。因此,流式传输wchar输出将如下所示: [within template class] // output wchar stream frien
template <int N, int M> class FixedPoint {...}
模板类固定点{…}
以及:
模板类复合体{…}
现在我想为不同的定点精度运行单元测试。例如,Complex
,Complex
,Complex
,等等
复杂表示法非常简单。你只需要显示实部和虚部。因此,流式传输wchar输出将如下所示:
[within template class]
// output wchar stream
friend inline std::wostream& operator<< (
std::wostream& outputStream, const Complex& object)
{
if (object.Imaginary < 0)
{
// imaginary negative: sign is included
outputStream << object.Real << object.Imaginary << "i";
}
else
{
// imaginary zero or positive: add sign
outputStream << object.Real << "+" << object.Imaginary << "i";
}
return outputStream;
}
[模板类内]
//输出wchar流
friend inline std::wostream&operator看来昆汀是对的:
template<typename T>
static inline std::wstring ToString(const Complex<T>& object)
{
RETURN_WIDE_STRING(object);
}
模板
静态内联std::wstring-ToString(常量复合体和对象)
{
返回\u宽\u字符串(对象);
}
我用重载替换了专门化,这就成功了。谢谢认为我必须专攻的错误,而重载也一样好。既然它真的有效,它应该更适合这里哇,这太愚蠢了。。。我手头没有这个框架,但是定义一个重载不是偶然的吗?
namespace Microsoft
{
namespace VisualStudio
{
namespace CppUnitTestFramework
{
// requires separate specializations for all implementations,
// because partial specialization is not allowed
template<>
static inline std::wstring
ToString<Complex<Double>>(
const Complex<Double>& object)
{
RETURN_WIDE_STRING(object);
}
template<>
static inline std::wstring
ToString<Complex<FixedPoint(1,4)>>(
const Complex<FixedPoint(1,4)>& object)
{
RETURN_WIDE_STRING(object);
}
[etc....etc....]
}
}
}
template<typename T>
static inline std::wstring ToString(const Complex<T>& object)
{
RETURN_WIDE_STRING(object);
}