我想调用一个方法(模板),该方法将vector<array<T, N>>&
与另一个返回vector<T>
是否有一种有效的(O(1))方式将vector<T>
重新解释为vector<array<T,1>>
? reinterpret_cast
它可能/安全吗?
答案 0 :(得分:0)
如果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"