MS2015 CppUnitTestFramework:重载模板类的 ToString
MS2015 CppUnitTestFramework: overloading ToString for template classes
我正在使用可变定点精度实现复杂的算术。我已经定义了:
template <int N, int M> class FixedPoint {...}
和:
template <typename T> class Complex {...}
现在,我想针对不同的定点精度运行单元测试。 例如 Complex<FixedPoint(1,4)>
、Complex<FixedPoint(128,6)>
、Complex<double>
等
复杂的表示非常简单。你只需要显示真实和虚构的部分。因此,流式传输 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;
}
但现在问题来了:由于单元测试框架 ToString 需要模板专用化,并且不允许部分专用化,因此我必须为所有使用的数据类型实现相同的 ToString 专用化! 例如
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);
}
我用重载替换了专业化,这起到了作用。谢谢。思考错误,我必须专业化,而超载也一样好。
相关文章:
- QDateTime::toString() 在退出处理程序中使用时失败
- 如何在 c++ 的 toString 方法中使用 setw(x) 并将其放入变量或建议中?
- 如何优化这个 toString() 成员函数
- 为什么我没有使用班级的tostring方法获得输出
- 得到错误"left of '.toString' must have class/struct/union",即使 toString 应该有一个合适的对象
- CString ToString() 模板重载 for CppUnitTestFramework.
- class function toString() C++
- 在类中使用tostring.C++
- 用于打印数组的 toString 无法C++工作
- MS2015 CppUnitTestFramework:重载模板类的 ToString
- ToString功能或(STD :: String)在C 中施放过载
- 对'std::string Helper::ToString<int>(int const&)'的未定义引用
- C++将 toString 替换为重载的输出运算符
- 构造函数测试在 toString() 函数上失败
- Lua toString 异常用于布尔值
- 重写 Windows 运行时组件中的 ToString
- C++ toString() with sprintf()
- 如何转换?toString() 的 C 字符串格式
- C++继承"toString"
- ToString<T>的良好做法?