Template方法的模板专门化

时间:2011-06-29 22:18:21

标签: c++ templates specialization template-specialization

好的,我有:

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const
        {
            /* Do Some Work */
        }
    };
};

不幸的是,“做一些工作”的通用版本对我不起作用。也不容易修改,因为它处于一些沉重的模板元编程代码的中间。

所以我虽然可以为我的类型专门化这个方法。所以我的第一步是尝试将一般方法拉出课堂。

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const;
    };
};


template<typename T>
template<typename C>
void typename Reader<T>::Input template operator()<C>(C& val) const   // LINE 13
{
    /* Do Some Work */
}

不幸的是我收到错误:

  

s.h:13:错误:错误:预期')'在'&amp;'标记

之前

2 个答案:

答案 0 :(得分:4)

就像普通的

一样写
template<typename T>
template<typename C>
void Reader<T>::Input::operator()(C& val) const   // LINE 13
{
    /* Do Some Work */
}

在课堂上定义通用版本并没有帮助你提供它的特殊版本,或者我确实错过了你的目标。

答案 1 :(得分:0)

我想这是不可能的,因为它算作部分功能模板专业化,这是不允许的。 void Reader<T>::Input::operator () (C& int)具有类型为this的隐式第一个参数(Reader<T>::Input *指针),因此其签名实际上是void (Reader<T>::Input *, C &)。您正在尝试指定C,而不是T