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

时间:2010-07-13 10:49:05

标签: c++ templates pointers

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

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 个答案:

答案 0 :(得分:5)

使用特征:

template <typename> struct ptr_traits {};
template <typename T> struct ptr_traits<T*>
{ typedef T value_type; };

ptr_traits<vecType::value_type>::value_type m;

答案 1 :(得分:5)

答案 2 :(得分:2)

特质可能是去这里的方式。

或者,您可以引入另一个typedef并在vecTypem的声明中使用此内容:

typedef UserType<double>* UserTypeDoublePtr;
typedef std::vector<UserTypeDoublePtr> vecType;

UserTypeDoublePtr m;

答案 3 :(得分:0)

让我问你“获得”这个类型是什么意思?

您实际上可以使用这种类型,例如,您可以声明此类型的新变量(如您在示例中所示),而无需明确指定它。

你的意思是你想要一个类型的文字描述吗?

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

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

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

如果您尝试在名称尚未定义的类型上使用TypeName,则会出现链接器错误。然后,您必须添加TypeName

的相应模板专精