2012-04-05 4 views
2

Если определить шаблон с параметром типаВыведение значения без TYPENAME аргумента шаблона

template <class T> 
void f(const T& arg){...}; 

то параметр T может быть выведен компилятором, даже если это явно не при условии. Есть ли способ достижения такого же эффекта со следующим шаблоном?

template <int n> 
void g(){...}; 

Я имею в виду, есть правила для шаблона вывода аргумента, когда аргумент имеет значение (целое, BOOL и т.д.), а не тип?

ответ

2

Я имею в виду, существуют ли правила для вывода аргумента шаблона, когда аргумент является значением (int, bool и т. Д.), А не типом?

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

Таким образом, вы можете сделать это:

template <int n> 
void g(int (&array)[n]){...}; 

и вывести n от размера массива.

+0

Это именно то, что я искал. Знаете ли вы о каких-либо других примерах, где это применимо? (или некоторые ссылки, в которых перечислены возможные случаи) – Malabarba

Смежные вопросы