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

Specialized template classes with common functions

是否可以为模板专门化一些功能 class 而无需专门化整个功能?

例如:

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
}

或类似的东西?

没有。但有办法解决它。

从模板 class 方法中将逻辑移交给自由函数模板专业化。

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>();
    }
};

要回答评论 - 如果您想部分专门化 class,您可以将公共逻辑委托给模板库 class。

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();
};