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