给定从矢量中获取的变量,有没有办法识别类型。
请注意,我已经知道成员的类型,并且可以在模板调用中指定它。这是一个特定的向量,允许特定类型的变量的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;
答案 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()
调用中所示。