0

我想调用一个方法(模板),它vector<array<T, N>>&从另一个返回 a 的方法中获取结果vector<T>

是否有一种有效的 (O(1)) 方式将 a 重新解释vector<T>为 a vector<array<T,1>>?它可能/安全reinterpret_cast吗?

4

1 回答 1

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"
于 2015-04-29T10:09:14.097 回答