将两个重载的模板函数分开,这些函数显示为Redefinition

时间:2014-07-01 23:43:27

标签: c++ templates c++11

我试图定义一个toString帮助器方法,它应该通过使用&lt;&lt;操作员(如果可用),或使用范围循环打印容器。我认为C ++ 11和模板魔法只是想弄清楚要使用什么,而是我得到错误&#34;重新定义&#39; toString&#39;&#34;。< / p>

    /** to string via o<<value operations */
    template<class T>
    inline static std::string toString(const T& value) {
        return (std::stringstream() << value).str();
    }

    /** to string via for each and tostring */
    template<class T>
    inline static std::string toString(const T& container) {
        std::stringstream stream;
        std::string delim = "";
        stream << "{";
        for (const auto& element : container) {
            stream << delim << toString(element);
            delim = ",";
        }
        stream << "}";
        return stream.str();
    }

我想这些定义必须以某种方式分开。可以将第二个模板专门化为矢量,这是有效的,但它只适用于矢量。所以我试图找到一种方法来实现traits和enable_if,首先我无法弄清楚,其次,似乎并不是支持范围循环的特性。或者&#39;支持&lt;&lt;操作员&#39;

0 个答案:

没有答案