Первый объявляет шаблон struct
с именем Example
, принимая любое количество типов:
template<typename... S>
struct Example /* <S...> */ ;
Если за именем вновь объявленного шаблона следует <>
, с или без аргументов это будет специализация!
Вторая определяет частичную специализацию хотя бы для одного аргумента типа:
template<typename H, typename... T>
struct Example<H, T...>
{
static const size_t value = sizeof(H) + Example<T...>::value;
};
И последняя определяет полную специализацию для типа нет -arguments:
template<>
struct Example<>
{
static const size_t value = 0;
};
Обратите внимание, что за template
следуют пустые <>
-кобки.
Неважно, что частичная специализация определена до полной специализации, потому что создание экземпляров должно быть отложено до тех пор, пока не будут известны аргументы типа шаблонов.
Конкретный экземпляр, который вы используете, Example<long,int,char>::value
, зависит от Example<int, char>::value
, который зависит от Example<char>
, что приводит к базовому случаю:
Example<long, int, char>::value = sizeof(long) + Example<int, char>::value; // sizeof(long) + sizeof(int) + 1 + 0
Example<int, char>::value = sizeof(int) + Example<char>::value; // sizeof(int) + 1 + 0
Example<char>::value = sizeof(char) + Example<>::value; // 1 + 0
Example<>::value = 0;
Конечно, пример может быть Упрощенно:
template <class... T>
struct Example {
static const size_t value = 0;
static_assert(!sizeof...(T), "The base-template only handles no template arguments.");
};
template <class H, class... T>
struct Example {
static const size_t value = sizeof(H) + Example<T...>::example;
};
Или с C ++ 17 выражениями фолда:
template <class... T>
struct Example {
static const size_t value = 0 + ... + sizeof(T);
};
В дополнение, есть веские причины никогда не использовать using namespace std;
, интересно, почему вы [ 1115], и return 0;
является избыточным для main()
.
PuTTY ничего не отправляет, когда вы нажимаете Ctrl + Tab .
Вы можете установить PuTTY, как описано здесь: Используя Ctrl + Tab в GNU Screen через PuTTY
Я считаю, что в настоящее время с помощью Ctrl + Tab невозможно с PuTTY, потому что PuTTY не позволяет вам настраивать определенные переводы для ключей. Вот достойная статья, которая показывает, как бы вы это настроили, если бы PuTTY поддерживал эту функцию:
http://www.staldal.nu/tech/2009/01/10/how-to-use-ctrl-tab -in-gnu-screen /
Если вы используете (или рассматриваете возможность использования) горячую клавишу / макрос-программу, такую как Autohotkey, вы можете эмулировать это поведение самостоятельно. Например, этот скрипт конфигурации Autohotkey будет делать именно то, что вы хотите:
#IfWinActive PuTTY
^Tab::Send :tabnext
^+Tab::Send :tabprev
#IfWinActive
(Обратите внимание, что в этом примере просто ищется любой заголовок окна, начинающийся с PuTTY, поэтому вам придется настраивать его в зависимости от конфигурации заголовка.)