Черты C ++ для параметров функции не шаблонов?
-
13-11-2019 - |
Вопрос
При определении шаблона функции, притягивания параметров шаблона в целом неизвестны.Тип черт можно использовать для получения некоторой информации при компиляции времени.Например, вот тривиальное применение генеракодицетагкода:
template <typename T>
void foo(T p) { cout << is_pointer<T>::value << endl; }
.
Мой вопрос в том, что когда-либо есть ситуация, в функции не шаблон , где такие черт, как функции компиляции, могут предоставить полезную информацию?
Решение
Да:
#include <iostream>
#include <limits>
int main()
{
std::cout << "Max value of an int on your platform is "
<< std::numeric_limits<int>::max() << "\n";
}
.
Это первый пример, который пришел к уму.Я уверен, что есть много других.В целом, это позволяет вводить «поиск» компиляции «поиск».Очевидно, что в ситуации без шаблона то же самое можно было достичь с помощью макроспределения (INT_MAX
и т. Д.).
Другие советы
Если не осмотреть информацию о времени компиляции о базовом типе, например, max и min для интегральных типов или что-то еще.
Реальная выгода для типовых черт состоит в том, чтобы помочь шаблону Meta Programming, либо путем добавления потока управления с Sfinae или для получения лучшей ошибки, когда используется неверный тип.