代码之家  ›  专栏  ›  技术社区  ›  DaClown

用作模板参数的指针的类类型

  •  3
  • DaClown  · 技术社区  · 15 年前

    如果指向用户定义类型的指针作为模板参数传递给模板类,是否可以获取参数的类类型?

    template <class T> struct UserType {
        typedef T value_type;
        ...
    };
    
    int main () {
        typedef std::vector<UserType<double>*> vecType
        vecType vec;
    
        vecType::value_type::value_type m; //how to get the double here?
    
        return 0;
    }
    
    4 回复  |  直到 15 年前
        1
  •  5
  •   Alexandre C.    15 年前

    使用特征:

    template <typename> struct ptr_traits {};
    template <typename T> struct ptr_traits<T*>
    { typedef T value_type; };
    
    ptr_traits<vecType::value_type>::value_type m;
    
        2
  •  5
  •   pmr    15 年前
        3
  •  2
  •   johnsyweb    15 年前

    在这里,性格可能是最重要的。

    或者,你可以介绍另一个 typedef vecType m

    typedef UserType<double>* UserTypeDoublePtr;
    typedef std::vector<UserTypeDoublePtr> vecType;
    
    UserTypeDoublePtr m;
    
        4
  •  0
  •   valdo    15 年前

    你真的可以 使用

    你的意思是你想要这种类型的文字描述吗?

    如果是这样的话-没有通用的100%的工作方式。这是因为编译后+链接类型和变量/函数名消失。它们只是在运行时不存在。

    但是,您可以编写一些额外的代码来获取所需类型的文本描述。方法之一:

    template <typename T> const char* TypeName();
    template <> const char* TypeName<int>() { return "int"; }
    template <> const char* TypeName<double>() { return "double"; }
    // ...
    

    TypeName 在一个你还没有定义名称的类型上。然后您必须添加 类型名