假设我有一个模板化的函数,它采用各种向量(但由于各种原因,我不能在模板参数中提到这一点).这是我正在尝试做的事情:在特定位置插入一个新的默认构造元素,而不知道它的类型:
template <typename T>
void foo(T* v) {
v->insert(v->begin() + 5, decltype(v->at(0))());
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,但让您了解我正在尝试做什么.我也试过使用value_type
,std::vector
但我也遇到了问题.任何想法如何解决这个问题?
支持整个"名称类型"业务:
v->emplace(v->begin() + 5);
Run Code Online (Sandbox Code Playgroud)
要么
v->insert(v->begin() + 5, {});
Run Code Online (Sandbox Code Playgroud)
您当前的版本不起作用,因为它decltype(v->at(0))
是一种引用类型.value_type
如果你正确使用它应该工作,但没有看到你在做什么我不能说它有什么问题.