Swift - Расширения протокола - Значения свойств по умолчанию

Я хотел бы (как было сказано ранее) создать класс шаблона, сделать все функции static и вспомогательной функцией приватными. Но кроме того, я также рекомендовал бы сделать конструктор закрытым, как показано ниже:

template <typename T>
class Foo{
public:
  static void func1(const T& value);
  static void func2(const T& value);
private:
  Foo();
  static void helper(const T& value);
}

Когда вы создадите конструктор private, компилятор не разрешит экземпляры этого шаблона. Таким образом, приведенный ниже код станет незаконным:

#include "foo.h"

int main(){
  int number = 0;
  Foo<int>::func1(number); //allowed
  Foo<int>::func2(number); //allowed
  Foo<int>::helper(number); //not allowed, because it's private
  Foo<int> foo_instance; //not allowed, because it's private
}

Так зачем кому-то это хотеть? Потому что наличие разных экземпляров, которые ТОЧНО, то же самое, чего вы, вероятно, никогда не захотите. Когда компилятор сообщает вам, что конструктор некоторого класса является закрытым, вы можете предположить, что наличие разных экземпляров этого файла будет неупорядоченным.

51
задан Axort 11 August 2016 в 00:41
поделиться