6

假设你有:

template<class T>
class A {
  template<class T1> 
  void foo(const T1& t1) {}

  //
  // Lots of other definitions (all templated)
  // 
};

而你想专攻foo(const T1&)但只为专攻A<bool>。像这样:

template<>
class A<bool> {
  template<class T1> 
  void foo(const T1& t1) {
    // Code for specialized A<boo>::foo
  }

  //
  // Repeating the former definitions, how to avoid this ??
  // 
};

但要让它工作,我必须复制类模板中定义的所有代码class A并将其再次包含在class A<bool>.

我试图只定义成员专业化:

template<>
void A<bool>::template<class T1> foo(const T1&) {}

这也不起作用:

template <class T1> void A<bool>::foo(const T1&) {}

但是编译器不喜欢它。处理这种代码重复的方法是什么?

4

2 回答 2

7

句法?看到这个答案。尝试:

template<>
template<typename T1>
void A<bool>::foo(const T1&){}

您当然不需要复制整个类模板。

于 2012-10-16T10:51:01.837 回答
0

您可以提供一个函数和一个类模板,然后定义几个 typedef:

template<class T, class TArg> 
class A 
{   
    void foo(const TArg& arg) {}

    // Lots of other definitions (all templated)
};

typedef A<MyType, MyType> NormalClass;
typedef A<MyType, bool>   BoolClass;
于 2012-10-16T10:45:11.993 回答