C ++如何识别变量的类型

时间:2015-03-03 18:57:38

标签: c++ types

给定从矢量中获取的变量,有没有办法识别类型。

请注意,我已经知道成员的类型,并且可以在模板调用中指定它。这是一个特定的向量,允许特定类型的变量的push_back()。

例如,我们有一个允许向量操作的类。

auto data = member().back(); // gets the last entry in the member vector

使用模板,我想创建一个类型为

的新条目
dataType newdata;
member().push_back(newdata)

在给出back()操作的结果的情况下,有没有办法识别dataType是什么?如果有,我可以创建一个模板,并通过传入成员指示符来检索类型。

如果没有,我必须专门传递类型才能定义

::base::dataArea newdata;

2 个答案:

答案 0 :(得分:6)

如果你真的想要聪明,你可以使用typename std::remove_reference<decltype( member().back() )>::type。但您应该使用typename V::value_type,其中V是通过member访问的向量的类型。参见例如docs at cppreference:查阅相关文档通常是个好主意。

答案 1 :(得分:1)

简单解决方案:member().resize(member().size()+1)

一般情况下,您无法推断未知的数据类型,因此您无法使用它们做什么。你不能盲目地假设他们有一个成员.foo()。您可以合理地假设该类型具有默认,复制和/或移动构造函数,然后您通常也不需要拼出该类型 - 如.resize()调用中所示。