如何在没有类专门化的情况下对类成员函数模板进行specalize

时间:2016-01-14 15:27:35

标签: c++ templates template-specialization

例如,我有这样的代码:

.H-文件:

template <typename T1>
class Templ
{
    public:
    template <typename T>
    T foo (T t);
};

的.cpp文件:

template <typename T1>
template <typename T>
T Templ<T1>::foo (T t)
{
    qDebug() << "Non-specialised template";
    return t;
}

template <>
template <>
int Templ<void>::foo (int t)
{
    qDebug() << "Specialised class template void> & method template <int>";
    return t;
}

如果我这样打电话:

Templ <void>t;
int i = t.foo<int>(1);

我会得到预期的“Specialized class template void&gt;&amp; method template”消息,但如果我想调用非专业化的函数:

Templ <float>t;
int i = t.foo<bool>(1);

我将得到未定义的引用链接器错误。如何调用非专业函数?

另外,如何定义非专业类的专用功能?我想做像

这样的事情
template <typename T1>
template <>
int Templ<T1>::foo (int t)
{
    qDebug() << "Specialised class template void> & method template <int>";
    return t;
}

但是,很明显,它不会编译。

0 个答案:

没有答案