繁体   English   中英

具有通用功能的专业模板类

[英]Specialized template classes with common functions

是否可以专门为模板类提供一些功能而无需专门针对整个事物?

例如:

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
}

还是类似的东西?

不。但是有办法解决。

从模板类方法中将逻辑传递给自由功能模板专业化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM