2010-10-14 15 views
7

wpisałem to do funkcji szablonu, żeby sprawdzić, czy to działa:Porównywanie typenames w C++

if (T==int) 

i intellisense nie skarżył. Czy to jest prawidłowe C++? Co jeśli zrobiłem:

std::cout << (int)int; // looks stupid doesn't it. 
+10

Intellisense = Compiler –

+4

I Kompilator! = Standardowy. –

+0

... czy jest ważny czy nie? Jeśli tak, małe wyjaśnienie na temat wewnętrznych działań byłoby świetne. –

Odpowiedz

7

Aby spełnić Twoje wymagania, powinieneś użyć operatora typeid. Wówczas wyrażenie będzie wyglądać

if (typeid(T) == typeid(int)) { 
    ... 
} 

Obvious próbki do zilustrowania, że ​​to naprawdę działa:

#include <typeinfo> 
#include <iostream> 

template <typename T> 
class AClass { 
public: 
    static bool compare() { 
     return (typeid(T) == typeid(int)); 
    } 
}; 

void main() { 
    std::cout << AClass<char>::compare() << std::endl; 
    std::cout << AClass<int>::compare() << std::endl; 
} 

Więc w stdout prawdopodobnie będziesz dostać:

0 
1 
5

Nie, to nie jest ważne C++.

IntelliSense nie jest wystarczająco inteligentny, aby znaleźć wszystko, co jest nie tak z kodem; musiałby w pełni skompilować kod, aby to zrobić, a kompilowanie C++ jest bardzo powolne (zbyt wolne w użyciu dla IntelliSense).

1

Nie, nie można użyć, jeśli (T == int) i std :: cout < < (int) int;

1

Twoja prawdopodobnie nie stworzyła nawet Twojego szablonu, dlatego została skompilowana.

1

Czy to właśnie próbujesz zrobić?

if(typeid(T) == typeid(int)) 

i to?

cout << typeid(int).name();