C++ C++;这段代码是如何工作的(如果构造函数/方法启用_)?

C++ C++;这段代码是如何工作的(如果构造函数/方法启用_)?,c++,sfinae,enable-if,C++,Sfinae,Enable If,我知道这两个主题以前已经讨论过,但我仍然不清楚构造函数的enable和方法的enable是如何工作的 这是我创建的一个清晰的示例 #include <type_traits> #include <string> #include <iostream> template<bool B> using EnableConstructorIf = typename std::enable_if<B, int>::type; templa

我知道这两个主题以前已经讨论过,但我仍然不清楚构造函数的enable和方法的enable是如何工作的

这是我创建的一个清晰的示例

#include <type_traits>
#include <string>
#include <iostream>



template<bool B> using EnableConstructorIf = typename std::enable_if<B, int>::type;

template<bool B, class T> using EnableMethodIf = typename std::enable_if<B,T>::type;


template <int N>
class MyClass {
public:
  std::string s;


  template<int M=N, EnableConstructorIf< (M<0) > = 0> MyClass() {
    s = "Negative";
  }
  template<int M=N, EnableConstructorIf< (M==0) > = 0> MyClass() {
    s = "Zero";
  }
  template<int M=N, EnableConstructorIf< (M>0) > = 0 > MyClass() {
    s = "Positive";
  }

  template<int M=N> EnableMethodIf< (M<0),  int> getSign() {
    return -1;
  }
  template<int M=N> EnableMethodIf< (M==0), int> getSign() {
    return 0;
  }
  template<int M=N> EnableMethodIf< (M>0),  int> getSign() {
    return +1;
  }


};



int main(int argc, char *argv[])
{
  using namespace std;

  MyClass<-5> a;
  MyClass<0> b;
  MyClass<100> c;

  cout << "a.string = " << a.s <<" ->"<< a.getSign() << endl;
  cout << "b.string = " << b.s <<" ->"<< b.getSign() << endl;
  cout << "c.string = " << c.s <<" ->"<< c.getSign() << endl;


  return 0;
}

请详细说明
enable\u if
上的其他问题尚未回答的具体问题。否则,我看不出有任何理由不以重复的形式结束这个问题。@unglish\u-mark它写得不好。@unglish\u-mark首先,我的代码清晰、简洁、教学性强,它实际上按照预期编译和运行。第二,它在同一个问题中给出了构造函数和方法启用的例子。你是说这个问题对任何人都没有帮助,对任何人都没有帮助?这有什么错?我从没说过你的问题对任何人都没有帮助。似乎你打算把这当作一个参考问题,而实际上你并不是在为自己寻找答案。这对我来说并不明显,而且标记为重复的问题并不妨碍它帮助其他人找到答案。我明天早上读。
a.string = Negative ->-1
b.string = Zero ->0
c.string = Positive ->1