Почему мне не нужно определять одни и те же члены, когда я делаю полную специализацию шаблона класса на C ++?

Я очень удивлен, обнаружив, что следующие компилируются:

#include <iostream>

using namespace std;

template<typename T>
class SomeCls {
public:
  void UseT(T t) {
    cout << "UseT" << endl;
  }
};

template<>
class SomeCls<int> {
  // No UseT? WTF?!??!?!
};

int main(int argc, char * argv[]) {
  SomeCls<double> d;
  SomeCls<int> i;

  d.UseT(3.14);
  // Uncommenting the next line makes this program uncompilable.
  // i.UseT(100);

  return 0;
}

Почему это разрешено? Просто кажется неправильным, что класс SomeCls не должен иметь метод void UseT (T t) . Я уверен, что мне не хватает здесь специализации (я не эксперт по C ++). Кто-нибудь, пожалуйста, просветите меня?

5
задан allyourcode 14 June 2011 в 07:00
поделиться