Итак, мы имеем следующее:Проверьте значение переменной во время компиляции/шаблоны
template<typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
void fun(const T& val)
{
std::cout << "val >= 0";
}
int main()
{
fun(34);
}
Представьте, что есть и другие перегруженные функции. Как я могу получить вышеперечисленную функцию перегрузки только для компиляции, когда значение val
больше, чем 0
?
На http://en.cppreference.com/w/cpp/types/is_integral я вижу, что operator()
перегружен для std::is_integral
и возвращает value
поэтому я попытался это:
template<typename T, typename = std::enable_if_t<std::is_integral<T>::value() > 0>>
Конечно, это выглядит не так, и это не так, как компилятор милостиво позволяет мне знать.
Как проверить значение переменной во время компиляции?
Переменная не имеет значения во время компиляции, только во время выполнения. –
@AlanStokes Только опция должна иметь значение как параметр шаблона? template –
DeiDei
Или вы можете посмотреть на функцию 'constexpr'. –