2013-06-29 1 views
2

Возможно использование признаков для вывода, если аргументом шаблона является значение или тип?Возможно ли определить значение или тип шаблона с использованием признаков?

template <typename A> 
void function(){ 
    if(is_value<A>()::value) 
     cout<<"A is value"<<endl; 
    else 
     cout<<"A is type"<<endl; 
} 

int main(){ 
    function<int>(); 
    function<3>(); 
} 

выходы

"A is type" 
"A is value" 
+0

как вы можете Immagine, что было бы чрезвычайно полезно. Это позволило бы наряду с lambdas очень приятные вещи: D – GameDeveloper

+1

Значение не является типом, а 'template ' ожидает тип. Нет кубиков, нет параметра «поймать все». – Xeo

ответ

1

Пер 14.3/1 Стандарт:

Там три формы-шаблона аргумента, соответствующие трем формы-шаблона параметра: типа , нестандартный и описание товара шаблон.

И в 14.3.1/1 стандарт:

Шаблон-аргумента для шаблона-параметра, который является типом должен быть типа ID.

Поскольку ваш аргумент шаблона является типа, вы должны пройти типа идентификатора в качестве аргумента шаблона. 3 не является тип-id. Таким образом, это невозможно на вашем пути.

Можно только добавить функцию с без типа-шаблона аргумента:

template <class A> 
void function() 
{ 
    std::cout << "A is type" << std::endl; 
} 

template <int A> 
void function() 
{ 
    std::cout << "A is value" << std::endl; 
} 

int main() 
{ 
    function<int>(); 
    function<3>(); 
} 
+0

приятный, но для этого требуется различная функция для каждого возможного типа «значения». так что в принципе невозможно сделать то, что я ожидал :(. – GameDeveloper

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

  • Нет связанных вопросов^_^