[[ ]]
имеет больше функций - я предлагаю, чтобы Вы смотрели на Усовершенствованное Руководство по созданию сценариев Bash для большего количества информации, конкретно расширенный тестовый раздел команды в Глава 7. Тесты .
Кстати, поскольку руководство отмечает, [[ ]]
был представлен в ksh88 (версия 1988 года оболочки Korn).
Шаблонные функции, включая функции-члены, должны быть полностью записаны в файлах заголовков. Это означает, что если у вас есть класс шаблона, его реализация должна быть полностью в файле заголовка. Это связано с тем, что компилятор должен иметь доступ ко всему определению шаблона (а не только к подписи), чтобы сгенерировать код для каждого экземпляра шаблона.
Поместите как объявление шаблона, так и функцию шаблона определения в файле заголовка. Большинство компиляторов C ++ не поддерживают отдельную модель компиляции для шаблонов
Если определение шаблонной функции не отображается в том месте, где оно используется (т. Е. Отсутствует в заголовке или том же файле CPP), вам необходимо сообщить компилятору какие экземпляры создать .
Проблема в том, что вы скрыли определение конструктора в файле .cpp. Это определение применяется ко всем всем типам T
, включая T
как int
, который вы используете, но фактически не предоставляет никаких определений, потому что он все еще только декларация.
Компоновщик не может найти символ Array
.
Теперь вы можете добавить такую строку:
Array<int> arr1;
в конец вашего файла Array.cpp, и это заставит компилятор создать экземпляр правильного определения, которое ищет компоновщик. Однако это предоставляет только одно определение, определение Array
и никакое другое.
Это решение будет работать, пока вам не понадобится Array
из другой параметр шаблона, скажем, double
, после чего вам нужно будет добавить:
Array<double> arr2;
в конец вашего файла Array.cpp - теперь вы можете видеть, насколько это неустойчиво!
Если вам нужен C ++ для работы с любым типом , который вам может понадобиться в будущем,
Как упоминалось выше, в шаблонах на C ++ процесс новых методов выполняется компилятором во время компиляции, проблема в том, что ему необходимо знать все определения thm за это время, поэтому все Объявление класса / функции должно быть файлом ar h или hpp.