问题标签 [template-meta-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
812 浏览

c++ - 用于控制算法的函子的编译时容器?

假设我想要一些简单的东西,如下所示:

我有一个核心算法,它随机选择一种专门的算法(在编译时专门)并处理这个算法。这些专门的算法是通过函子实现的。

现在的问题是:如何实现一个容器,它是在编译时构建的,其中核心算法可以首先检查这个容器的大小(“我有 4 个算法 -> 需要随机选择算法 0-3”)然后可以在此容器中执行函子(“随机选择 2 -> 处理容器中的第三个函子”)。

如何尽可能简单地实现它?我想这是可能的。

奇怪地重复出现的模板习语有什么联系吗?(维基链接
有没有使用Boost::Fusion的简单方法?(官方文档

编辑:所有算法都将用于核心算法。使用模式(随机数)是运行时决策(所以我不需要编译时随机数)。该算法只需要知道函子的容器和该容器的大小即可安全访问。

0 投票
1 回答
258 浏览

c++ - 模板元编程为此?

有没有办法使用模板元编程或其他东西来做到这一点?如果有帮助,我总是可以使用指针将其设为类别*。

0 投票
3 回答
442 浏览

c++ - 如何使用可选的编译时参数声明模板化函数?

我想要一个带有这个接口的功能。

第一个编译时参数是一个类型。在每个函数调用中都需要它。
第二个编译时间参数是可选的。它用于修改func.
函数本身以常规参数的类型 ( Type2) 为模板。

这样的界面能建吗?

如果不能,有没有办法获得类似的行为?例如,类似于模板化函数的东西,它接受两个编译时参数,其中第二个是可选的?

天真的方法是行不通的。

0 投票
3 回答
525 浏览

c++ - 我如何(在编译时)确定类型名是否是函数指针类型名?

考虑以下围绕 Win32 的运行时动态链接机制的包装器:

还有一个示例客户端:

GetFunction基本上,如果有人尝试使用whereT函数指针类型以外的任何内容,我想添加一条错误消息(因为reinterpret_cast我被迫在此处使用可能会隐藏用户错误)。

挖掘提升类型特征,我确实发现有一个现有的is_function模板。但是,is_function接受对函数的引用,这在我的情况下是用户错误(仅限函数指针)。

如果不是函数指针类型,我如何修改RuntimeDynamicLinker::GetFunction<T>()以产生合理理解的编译器错误消息?T

(旁注:我从来没有做过任何类型的 TMP,所以不要害怕复习那些对 TMP 的普通用户来说“基本”的东西)

0 投票
1 回答
204 浏览

c++ - 切换返​​回

本质上,我在这里喜欢做的是进行模板化函数调用,其中调用者本质上请求给定类型,并且将传回指针或引用。根据模板中给出的类型,我希望返回检索到的未调整指针,如果它是一个指针,如果它是一个存储值,我想将类型切换为引用。我还想扩展这个想法,包括引用、类、指向类的指针等等......

此代码在运行时分别输出 5 和 2。

我想我这样做的第一个问题是定义我希望这样做的返回类型

反而。我不确定为什么这不起作用我只是在我能想象到的所有东西的任何组合中得到一个未解决的模板错误。

我的第二个问题是处理各种不同的返回类型。这将有点考验,如果我错了,请纠正我,尾随返回类型将是一个快速修复,因为编译器似乎忽略了无效返回。这是我通过简单地传递 ->decltype(T) 来测试的,但我可能在某处的测试中犯了错误。

我认为我在这里所拥有的足以完成这项工作。我敢肯定有一些关于为什么这可能不是一个好主意的意见,我很想听听这些意见。

谢谢,贝卡德:

0 投票
2 回答
11809 浏览

vb.net - VB.NET 重命名文件和重新标记/编辑图像元数据/元标记

澄清:

如何在不使用外部 DLL 的情况下编辑和保存图像 EXIF / Metadata / FileInfo?

项目:

我正在构建一个供个人使用的应用程序,用于重命名、重新标记和组织我在个人网站上托管的世界末日数量的图像。由于我多年来一直在收集有趣的图片等,因此文件命名约定没有真正的韵律或理由。因此,Image0001.jpg 需要重命名为描述性文件名,并且需要填写 Metadata 字段。

所需的过程将采用现有的 jpg、gif、png、tiff 或 bmp 并执行以下操作:

  1. 将图像加载到内存中
  2. 如果需要,将 bmp 文件转换为 jpgs(主要用于较小的文件大小)
  3. 将图像标签加载到 ImageData 结构中(见下文)
  4. 将文件数据加载到 ImageData 结构中(需要时)
  5. 显示图像和标签供用户编辑(在图片框和多个文本框中)
  6. 允许编辑字段和重命名文件
  7. 将更改写入图像文件
  8. 转到下一个文件。

例子:

  1. 加载 Image0001.jpg。填充 ImageData Structure 字段。
  2. 输入描述:“lolcat 天花板猫送儿子”。
  3. ImageData.FileName 更改为“lolcat-ceiling-cat-sends-son.jpg”。
  4. ImageData.Name、.Keywords、.Title、.Subject 和 .Comments 更改为“lolcat 天花板猫送儿子”。
  5. 使用新文件名保存文件并保存所有新标签字段。

(稍后,我还将使用 SQL 构建一个参考数据库,其中包含指向这些文件的在线副本的链接,以允许按关键字、主题、文件名等进行搜索,但这是比这一层容易得多的另一层。至少我。)

问题:

到目前为止,几天的研究几乎没有取得可衡量的进展。信息显然被莫名其妙地隐藏在一堆我没有用于搜索的意外搜索关键字后面。任何帮助,将不胜感激。

当前代码原样:

目前查找数据的方法是:

只是我审查过的几个“Top Box”搜索结果:

  • dso.DLL:非常有用,但不可取。需要外部 DLL。
    [http://]www.developerfusion.com/code/5093/retrieving-the-summary-properties-of-a-file/

  • 数据不完整 ~ 不回答我的问题
    [http://]msdn.microsoft.com/en-us/library/xddt0dz7.aspx

  • 需要外部 DLL
    [http://]www.codeproject.com/KB/GDI-plus/ImageInfo.aspx

  • 需要外部软件
    [http://]stackoverflow.com/questions/3313474/write-metadata-to-png-image-in-net

  • 旧数据 ~ Visual Studio 2005 和 .NET 2.0
    [http://]www.codeproject.com/KB/graphics/MetaDataAccess.aspx

  • 转换为 BMP:看起来很有用
    [http://]www.freevbcode.com/ShowCode.Asp?ID=5799

0 投票
6 回答
2183 浏览

c++ - 没有虚函数的 C++ 动态调度

我有一些遗留代码,而不是虚拟函数,而是使用kind字段进行动态调度。它看起来像这样:

然后POD类的函数成员是这样实现的:

POD::GetBar(), POD::GetBaz(),POD::GetXyzzy()和其他成员的实现方式类似。

这个例子被简化了。实际的代码有十几种不同的子类型POD和几十种方法。新的子类型POD和新方法的添加非常频繁,因此每次我们这样做时,我们都必须更新所有这些switch语句。

处理这种情况的典型方法是virtualPOD类中声明函数成员,但我们不能这样做,因为对象驻留在共享内存中。有很多代码依赖于这些结构是普通的旧数据,所以即使我能找到某种方法在共享内存对象中拥有虚函数,我也不想这样做。

因此,我正在寻找有关清理它的最佳方法的建议,以便所有关于如何调用子类型方法的知识都集中在一个地方,而不是分散在几十switch个函数中的几十个语句中。

我想到的是,我可以创建某种包装 aPOD并使用模板来最小化冗余的适配器类。但在我开始走这条路之前,我想知道其他人是如何处理这个问题的。

0 投票
4 回答
888 浏览

c++ - 如何知道传递给函数的参数是 C++ 中的类、联合还是枚举?

我想为所有枚举定义一个运算符<<,以计算出值并打印它是这样的枚举:

代码:

输出:

我知道一种通过使用is_enum结构来使用 Boost 库的方法。但我不明白它是如何工作的。所以这就是为什么,一般来说,我对如何识别可验证是类类型、联合类型还是枚举(在编译时)感兴趣。

0 投票
1 回答
1456 浏览

c++ - 提振精神期望失败

我想解析以下结构的向量:

我的语法如下所示:

我的 Harnass 看起来像这样:

如果我将规则规范从 kleene 星规范切换到序列匹配,则不会出现错误。

否则在尝试解析我的例句时会出现预期错误(显示在 harnass 中)。

理想情况下,我想写这样的规则dm_lines = +(data_member_line)(这也不起作用)。使用 '*' 和 '+' 运算符时发生了什么导致预期失败?但不是在匹配序列时?以及我该如何解决。

0 投票
3 回答
958 浏览

c++ - 检测 basic_string 实例化

我编写了以下代码来确定类型是否是 的实例化std::basic_string

有没有更简洁的方法来实现这一目标?