如果删除了复制构造函数 CASE WA_COL-INTTYPE.
WHEN 'A'. LO_DESCR_RESULT = CL_ABAP_ELEMDESCR=>GET_DECFLOAT16( ).
WHEN 'E'. LO_DESCR_RESULT = CL_ABAP_ELEMDESCR=>GET_DECFLOAT34( ).
,如何从 std::vector<T*>
创建 std::vector<T>
?
为什么我需要这个?
- 我们的线程( tbb )仿函数需要T(const T&)
vector
。
T*
因为我在循环中创建// sample code
std::vector<T> vt;
std::vector<T*> vtp;
for (...)
{
T a;
a.build(args...); // 'build()' rebuilds the point tree
vt.push_back(a);
}
// store T pointer in vtp
for (auto i = vt.begin(); i != vt.end(); i++)
vtp.emplace_back(&*i); // error: use of deleted function 'T::T(const T&)'
对象T
所以我不能(唯一地)将a
直接存储到a*
中,因为它会被覆盖在vtp
上同一地址。我正在使用 C ++ 11 和 GCC4.8 。
我有另一种解决方案:
T t_a1, t_a2, t_a3, t_a4;
vtp = {&t_a1, &t_a2, &t_a3, &t_a4};
for (...)
{
(vtp[pageIdx])->build(args...); // pageIdx is block index in current range block
}
在这种方法中,我需要提前构建一定数量的树。虽然,我可以通过获取范围内的块数来轻松计算树的数量。但我想提前避免手动创建树,我不确定它是否有效。