我想调用一个方法(模板),它vector<array<T, N>>&
从另一个返回 a 的方法中获取结果vector<T>
是否有一种有效的 (O(1)) 方式将 a 重新解释vector<T>
为 a vector<array<T,1>>
?它可能/安全reinterpret_cast
吗?
我想调用一个方法(模板),它vector<array<T, N>>&
从另一个返回 a 的方法中获取结果vector<T>
是否有一种有效的 (O(1)) 方式将 a 重新解释vector<T>
为 a vector<array<T,1>>
?它可能/安全reinterpret_cast
吗?
如果T
实际上是std::array<U,1>
您应该能够通过模板推导和重载来做到这一点:
template <typename T>
std::vector<T> myFunc()
{ return {T{1}}; }
template <typename T>
void myOtherFunc(std::vector<T>)
{ cout << "not an array\n"; }
template <typename T, size_t N>
void myOtherFunc(std::vector<std::array<T,N>>)
{ cout << "an array\n"; }
然后像这样调用它:
myOtherFunc(myFunc<int>()); //prints "not an array"
myOtherFunc(myFunc<std::array<int,1>>()); //prints "an array"