我的模板有一个很奇怪的问题。获取错误error: ‘traits’ is not a template。我无法在示例测试项目中重现该问题。但这发生在我的项目中(比我在此处发布的要大)。

无论如何,以下是我的文件和用法。有人知道何时发生此错误吗?

我在traits.hpp中有以下内容。

namespace silc
{
    template<class U>
    struct traits<U>
    {
        typedef const U& const_reference;
    };

    template<class U>
    struct traits<U*>
    {
        typedef const U* const_reference;
    };
}

在另一个头文件中使用。
namespace silc {

    template<typename T>
    class node {
    public:

        typedef typename traits<T>::const_reference const_reference;

        const_reference value() const {
            /* ... */
        }
    }
}

最佳答案

模板特化的语法是……不愉快。

我相信您可以通过将struct traits<U>替换为struct traits来解决您的错误(但请保持struct traits<U*>不变!)。

但是,要看好的一面!至少您没有对函数类型进行部分特化:

// Partial class specialization for
// function pointers of one parameter and any return type
template <typename T, typename RetVal>
class del_ptr<T, RetVal (*)(T*)> { ... };

// Partial class specialization for
// functions of one parameter and any return type
template <typename T, typename RetVal>
class del_ptr<T, RetVal(T*)> { ... };

// Partial class specialization for
// references to functions of one parameter and any return type
template <typename T, typename RetVal>
class del_ptr<T, RetVal(&)(T*)> { ... };

关于c++ - 错误: ‘traits’不是模板-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2304989/

10-10 18:34