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.
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.
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
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).
Nie, nie można użyć, jeśli (T == int) i std :: cout < < (int) int;
Twoja prawdopodobnie nie stworzyła nawet Twojego szablonu, dlatego została skompilowana.
Czy to właśnie próbujesz zrobić?
if(typeid(T) == typeid(int))
i to?
cout << typeid(int).name();
Intellisense = Compiler –
I Kompilator! = Standardowy. –
... czy jest ważny czy nie? Jeśli tak, małe wyjaśnienie na temat wewnętrznych działań byłoby świetne. –