如何在编译时推断嵌套 std::vector 的内部类型?

2024-01-16

有一天我问了一个非常类似的问题 https://stackoverflow.com/questions/59490698/how-can-i-get-the-depth-of-a-multidimensional-stdvector-at-compile-time关于嵌套向量,但我遇到了另一个让我难倒的问题。我需要在编译时获取嵌套向量的最内部类型,以便我可以使用它作为模板参数传递。

例如,如果我有这个嵌套向量:

std::vector<std::vector<std::vector<int>>> v;

我需要一种方法来提取int所以我可以调用一个函数,该函数采用嵌套向量并对元素进行处理,如下所示:

foo<int>(v);

但问题是这个函数应该能够处理任何深度、任何类型的嵌套向量。当我打电话时foo我希望自动为我推导出内部类型。

所以也许这个调用看起来像这样:

foo<inner_type_t<v>>(v);

Where inner_type_t是某种形式的递归模板,可以解析为int当给予v.

我认为该解决方案与其他问题的解决方案类似,但我一直无法解决......在递归模板方面我仍然有点新手。

Edit:

这是我到目前为止所拥有的......

template <typename T>
struct inner_type
{
    using type = T;
};

template <typename T>
struct inner_type<std::vector<T>>
{
    using type = inner_type<T>;
};

int main()
{
    std::vector<std::vector<int>> v  = {
        { 1, 2}, {3, 4}
    };

    std::cout << typeid(inner_type<decltype(v)>::type).name();
}

output:

struct inner_type<class std::vector<int,class std::allocator<int> > >

哇,我真的很接近哈哈,开始工作了!

我只需稍微更改模板专业化即可正确递归地获取类型。

template <typename T>
struct inner_type
{
    using type = T;
};

template <typename T>
struct inner_type<std::vector<T>>
{
    // Had to change this line
    using type = typename inner_type<T>::type;
};

int main()
{
    std::vector<std::vector<int>> v  = {
        { 1, 2}, {3, 4}
    };

    std::cout << typeid(inner_type<decltype(v)>::type).name();
}

Output:

int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在编译时推断嵌套 std::vector 的内部类型? 的相关文章

随机推荐

  • Visual C++:如何禁用特定链接器警告?

    我正在使用 CGAL 中的一个库 该库在代码编译的链接阶段会产生许多这种形式的链接警告 warning LNK4099 PDB vc80 pdb was not found with gmp vc80 mt sgd lib or at vc
  • 在android中放大图像视图时如何禁用抗锯齿?

    我有一幅像素艺术 我想放大它 问题是当我放大它时 它会因为抗锯齿而变得模糊 有没有办法直接从 xml 禁用抗锯齿功能 我希望它有用 Bitmap bmpSource BitmapFactory decodeResource getResou
  • 在 Android Studio 中运行应用程序时如何切换自动打开运行选项卡?

    有没有办法让 Android Studio 在运行应用程序时自动打开运行选项卡 解决办法是去Run gt Edit Configurations gt 选择 杂项 选项卡并检查Show logcat automatically
  • Subversion Server SSL 证书验证失败:以及其他原因

    我有一个 SVN 系统 运行得很好 但在最近升级后突然停止工作 我的设置 我有一个使用 VisualSVN Server 2 7 4 托管在 Windows 2008 服务器上的存储库 服务器使我能够随意生成自签名证书 根据需要输入我自己的
  • 从一个节点 A 到节点 B 的最大边权

    给定一个连通的无向图N节点 1 NN 1边缘 我们定义一个函数F a b where F a b 等于路径中的最大边权重a to b 我们如何找到总和F a b 对全部a b这样1 lt a b lt N 模 10 9 7 示例图 F a
  • SQL Server 2008 (R2) 的 CRUD SP 生成器

    我正在使用 SQL Server 2008 R2 是否有一个免费的脚本 实用程序可以为我的所有数据库表创建 CRUD SP 我以前有一份 但剧本丢了 Thanks I use SSMS 工具包 http www ssmstoolspack
  • C# 在运行时获取进程输出

    无论如何 是否可以重定向生成进程的标准输出并在发生时捕获它 我所看到的一切都只是在该过程完成后执行 ReadToEnd 我希望能够在打印时获得输出 Edit private void ConvertToMPEG Start the chil
  • Android 内存不足异常

    有什么办法可以处理吗OutOfMemoryException在Android中同时使用大量图片的Bitmap 我尝试了本网站给出的所有解决方案 即 GC Bitmap reset 我只是想知道在堆内存即将满之前是否可以生成警报 这样我就可以
  • ABAP ADT 先决条件?

    在 Eclipse 中建立与本地数据库的连接以开始在 ABAP 中进行开发需要什么 我已经安装了 ABAP 插件 但无法连接到数据库 有什么建议么 ABAP 开发工具 ADT https tools hana ondemand com ab
  • 从 Ada 程序启动可执行文件并读取结果

    I found this https stackoverflow com questions 32663224 why isnt my gnats standout file descriptor working问题和第一个答案包含一些示例
  • 在jqgrid中添加行

    我正在使用 jqGrid 并且它工作正常 我有一个场景 我必须在 jqGrid 中添加一个空白行 而不是弹出窗口来添加行 我该怎么做 您可以使用例如添加行数据 http www trirand com jqgridwiki doku php
  • 用C将客户端输入插入MySQL数据库

    如何编写一个 C 程序来获取 MySQL 服务器的客户端输入 我使用 Fedora 作为我的操作系统 这是我的代码 include
  • 如何判断 ASP.NET 应用程序中的 HTTP 标头何时已发送?

    长话短说 我有一个 ASP NET 应用程序 我正在尝试调试 在某些时候 在非常特殊的情况下 该应用程序将抛出异 常Response Redirect 陈述 Cannot redirect after HTTP headers have b
  • 如何使用 Linq 选择具有一对多关系的所有内容

    我有两张桌子 CREATE TABLE Thing Id int Name nvarchar max CREATE TABLE SubThing Id int Name nvarchar max ThingId int foreign ke
  • Google 地图未完全呈现在页面上?

    我的页面上有一个谷歌地图 其中有一个我自己构建的搜索窗格 可以随意显示和隐藏 假设它的一侧覆盖了地图的 200 个像素 问题是 当我调整地图大小时 窗格重叠的区域不会渲染 即地图由于某种原因不会在那里渲染 看看这个link http www
  • 如何将 .XLS 和 .XLSX 文件转换为 .PDF 格式并将它们返回到 Powershell 中的每个原始子文件夹?

    我目前有一个 powershell 脚本 可以很好地将 Excel 电子表格转换为 PDF 文件 但我的问题是新文件出现在父文件夹中 而不是它们来自的特定子文件夹中 我当前的脚本如下所示 path c users me Documents
  • 在 PostgreSQL 中对 JsonB 数组进行 Sequelize ORM 查询

    如何使用一些匹配条件和逻辑运算 lt et gte等 在 Jsonb 对象数组上 在 PostgreSQL 中使用 Sequelize ORM 表名 calls id direction metaData 1 inbound 2 outbo
  • 使用 Javascript 比较 HTML 中的两个输入数字?

    我正在使用 Notepad 创建一个简单的网页 用户在文本框中输入两个数字 然后按下按钮 当他们按下按钮时 会出现一些信息 告诉他们第一个数字还是第二个数字更大 我有以下代码 但无法得到任何结果 有谁知道出了什么问题吗
  • XML 新版本 - 新功能

    XML 有新版本了吗 如果是的话 它是什么时候发布的 有哪些新功能 目前 基本 XML 规范中的新功能不太可能出现 当然 XML 系列中的其他标准将会继续发展 但 XML 本身非常稳定 该标准有多个 版本 到目前为止为止是第五版 但这些仅仅
  • 如何在编译时推断嵌套 std::vector 的内部类型?

    有一天我问了一个非常类似的问题 https stackoverflow com questions 59490698 how can i get the depth of a multidimensional stdvector at co