Дженерики C# по сравнению с шаблонами C++ [дубликат]

Необходимо поместить весь тот код где-нибудь.
, Если Вы собираетесь иметь хранимые процедуры вообще (я лично делаю одолжение их, но многие не делают), тогда Вы могли бы также использовать их так, как Вы должны. По крайней мере, вся логика базы данных находится в одном месте. Оборотная сторона - то, что обычно нет большого количества структуры к блоку, полному сохраненного procs.

Ваш вызов!:)

10
задан Community 23 May 2017 в 11:46
поделиться

5 ответов

Вы можете рассматривать шаблоны C ++ как интерпретируемый функциональный язык программирования, замаскированный под систему обобщений. Если это вас не пугает, то следует:)

Дженерики C # очень ограничены; вы можете параметризовать класс по типу или типам и использовать эти типы в методах. Итак, чтобы взять пример из MSDN , вы можете сделать:

public class Stack<T>
{
   T[] m_Items; 
   public void Push(T item)
   {...}
   public T Pop()
   {...}
}

И теперь вы можете объявить Stack или Stack и он будет безопасно хранить объекты этого типа (т. е. не беспокойтесь о том, что по ошибке поместите SomeOtherObject ).

Внутренне среда выполнения .NET будет специализировать его на варианты для основных типов, таких как int, и вариант для типов объектов. Это позволяет, например, представлять Stack намного меньше, чем представление Stack .

Шаблоны C ++ допускают аналогичное использование:

template<typename T>
class Stack
{
    T *m_Items;
    public void Push(const T &item)
    {...}
    public T Pop()
    {...}
};

This на первый взгляд выглядит похоже, но есть несколько важных отличий. Во-первых, вместо одного варианта для каждого фундаментального типа и одного для всех типов объектов существует один вариант для каждого типа, для которого создается экземпляр . Типов может быть много!

Следующее важное отличие (в большинстве компиляторов C ++) заключается в том, что он будет компилироваться в каждой единице трансляции, в которой он используется. Это может сильно замедлить компиляцию.

Еще одним интересным атрибутом шаблонов C ++ является то, что они могут применяться к вещам, отличным от классов, и когда это так, их аргументы могут быть автоматически обнаружены. Например:

template<typename T>
T min(const T &a, const T &b) {
  return a > b ? b : a;
}

Тип T будет автоматически определяться контекстом, в котором используется функция.

Эти атрибуты могут быть использованы с хорошими целями за счет вашего здравомыслия. Поскольку шаблон C ++ перекомпилируется для каждого типа, с которым он используется, а реализация шаблона всегда доступна компилятору, C ++ может выполнять очень агрессивную встраивание в шаблоны. Добавьте к этому автоматическое определение значений шаблона в функциях, и вы сможете сделать анонимными псевдофункциями в C ++, используя boost :: lambda . Таким образом, выражение вроде:

_1 + _2 + _3

создает объект с серьезно пугающим типом, в котором есть оператор (), который суммирует свои аргументы.

Существует множество других темных уголков системы шаблонов C ++ - это чрезвычайно мощный инструмент, но об этом может быть больно думать, а иногда трудно использовать, особенно когда это дает вам сообщение об ошибке длиной в двадцать страниц. Система C # намного проще - менее мощная, но более понятная и трудная для злоупотребления.

21
ответ дан 3 December 2019 в 15:35
поделиться
2
ответ дан 3 December 2019 в 15:35
поделиться

http://blogs.msdn.com/csharpfaq/archive/ 2004/03/12 / 88913.aspx

Грубо говоря, большая часть различий связана с тем фактом, что шаблоны разрешаются во время компиляции, а обобщенные шаблоны разрешаются во время выполнения.

4
ответ дан 3 December 2019 в 15:35
поделиться

Этот блог запись Эрика Ганнерсона довольно хорошо освещает эту тему.

Самым большим непосредственным отличием является то, что шаблоны являются функцией времени компиляции, тогда как универсальные шаблоны - функцией времени выполнения.

1
ответ дан 3 December 2019 в 15:35
поделиться

Это похоже на удобную справочную информацию.

http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx

0
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: