将vector <t>转换/重新解释为vector <array <t,1 =“”>&gt;

时间:2015-04-29 10:00:29

标签: c++ reinterpret-cast stdarray

我想调用一个方法(模板),该方法将vector<array<T, N>>&与另一个返回vector<T>

的方法的结果一起使用

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

1 个答案:

答案 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"