微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在编译时展开嵌套向量

如何解决在编译时展开嵌套向量

我正在尝试解决展开嵌套向量的问题,例如 vector..>,我想访问核心 int 元素。这是我写的

#include <iostream>
#include <type_traits>
#include <vector>

template<typename S>
void print(S);

template<typename T,typename S>
void decode(T container) {
        if(std::is_same<T,S>::value)
                print<S>(container);
        else{
                for(auto i : container){
                        decode<decltype(i),S>(i);
                }
        }
}

template<typename S>
void print(S ele){
        std::cout<<ele<<" ";
}

int main(){
        std::vector<std::vector<std::vector<int>>> a = {{{1,2,3},{4,5}}};
        decode<decltype(a),int>(a);

}

但它正在显示

nested_vector_decoder.cpp: In instantiation of ‘void decode(T) [with T = std::vector<std::vector<std::vector<int> > >; S = int]’:
nested_vector_decoder.cpp:26:28:   required from here
nested_vector_decoder.cpp:11:12: error: cannot convert ‘std::vector<std::vector<std::vector<int> > >’ to ‘int’
   11 |   print<S>(container);
      |            ^~~~~~~~~
      |            |
      |            std::vector<std::vector<std::vector<int> > >
nested_vector_decoder.cpp:20:14: note:   initializing argument 1 of ‘void print(S) [with S = int]’
   20 | void print(S ele){

我不明白为什么我会看到这个错误,因为我已经在 compile container 检查它是否是 int 或不是 if(std::is_same<T,S>::value),谁能解释我>

错误信息是否应该作为警告信息。

是的,我确实看到了有关展开嵌套向量的答案,但我想知道我做错了什么,内部是如何工作的,以便我能够理解它。

谢谢。

在c++中运行时也可以进行这种操作吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。