代码之家  ›  专栏  ›  技术社区  ›  Alexander Rafferty

C++中的类型名称比较

c++
  •  7
  • Alexander Rafferty  · 技术社区  · 14 年前

    我把它输入到模板函数中,只是想看看它是否能工作:

    if (T==int)
    

    智能感知没有抱怨。这是有效的C++吗?如果我这样做:

    std::cout << (int)int;  // looks stupid doesn't it.
    
    5 回复  |  直到 14 年前
        1
  •  9
  •   Keynslug    14 年前

    为了满足你的要求,你应该使用 typeid 操作员。那么你的表情会像

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

    明显的例子说明这确实有效:

    #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;
    }
    

    所以在stdout中,你可能会得到:

    0
    1
    
        2
  •  5
  •   James McNellis    14 年前

    不,这不是有效的C++。

    智能感知不够聪明,无法找到代码中所有错误的东西;它必须完全编译代码才能做到这一点,编译C++非常慢(对于智能感知来说太慢了)。

        3
  •  1
  •   xueyumusic    14 年前

    不,不能使用if(t==int)和std::cout<<(int)int;

        4
  •  1
  •   Grozz    14 年前

    您可能甚至没有实例化模板,这就是它编译的原因。

        5
  •  1
  •   Benjamin Lindley    14 年前

    这就是你想做的吗?

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

    这是什么?

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