enable_if方法专门化,在类声明

时间:2017-06-09 13:46:08

标签: c++ templates

我正在编写一个模板化的单例超类,它可以提供线程局部实例或进程全局实例。下面的代码编译并在技术上符合我的需要。 但是,如何在类声明之外编写函数实现?如何在类中声明函数(右边是注释行)?

所有类似的问题都在类声明中实现了这个功能。

#include <vector>
#include <type_traits>


using namespace std;

template <class t, bool tls=true>
class A{
public:
  typedef std::vector<t> Avector;
//  static Avector& getVector();

  template <class T=t, bool TLS=tls, typename std::enable_if<!TLS>::type* = nullptr>
  static Avector&
  getVector(){
    static Avector v=Avector();
    return v;
  }

  template <class T=t, bool TLS=tls, typename std::enable_if<TLS>::type* = nullptr>
  static Avector&
  getVector(){
    static thread_local Avector v=Avector();
    return v;
  }
};

int main(){
  vector<int>& vi = A<int>::getVector();
  vector<double>& vd = A<double, false>::getVector();
  return 0;
}

1 个答案:

答案 0 :(得分:1)

你可以写

if(msg === 100)

此外,通常是singletons shouldn't be used