具有常用功能的专用模板类

时间:2015-03-28 00:00:23

标签: c++ templates template-specialization

是否可以为模板类专门设计一些函数而不需要对整个事物进行专门化?

例如:

template <typename T>
struct A {
    int foo();
};

template <typename T>
int A<T>::foo() { return 1;}

template <>
struct A<int> {
    int bar() { return 2; };
};

main() {
    A<int> a;
    a.foo(); //1
    a.bar(); //2
    A<double> b;
    b.foo(); //1
    b.bar(); // ERROR
}

或类似的东西?

1 个答案:

答案 0 :(得分:1)

没有。但是有一种解决方法。

从模板类方法中将逻辑移交给自由函数模板特化。

template<class T>
int delegated_foo() {
    return 1;
}

// now specialise 
template<>
int delegated_foo<int>() {
  return 2;
}

template <typename T>
struct A {
    int foo() {
        return delegated_foo<T>();
    }
};

回答评论 - 如果你想部分专门化一个类,你可以将常用逻辑委托给模板基类。

template<class T>
struct a_common {
  void common_function() { 
    // define here. Compiler will generate 1 for each T  
  }
};

template<class T>
struct A : public a_common<T>
{
  int something_i_might_specialise();
};