接受给定数量的双精度数的可变参数模板方法?

2023-12-27

template <unsigned int N> class myclass
{
public:
    template <typename... Args> void mymethod(Args... args)
    {
       // Do interesting stuff
    } 
};

I want mymethod仅当恰好有 N 个双打时才被调用。那可能吗?也就是说,假设我有:

myclass <3> x;
x.mymethod(3., 4., 5.); // This works
x.mymethod('q', 1., 7.); // This doesn't work
x.mymethod(1., 2.); // This doesn't work

我怎样才能完成这件事?


对于参数数量约束,您可以轻松检查是否sizeof...(Args) == N但是为了检查所有参数是否都是双精度数,您需要构建一个递归类型特征来检查std::is_same对于每个参数。

template<typename...>
struct are_same : std::true_type 
{};

template<typename T>
struct are_same<T> : std::true_type
{};

template<typename T, typename U, typename... Types>
struct are_same<T, U, Types...> :
    std::integral_constant<bool, (std::is_same<T, U>::value && are_same<T, Types...>::value)>
{};

Notice are_same首先声明然后专门.

然后只需使用以下方法在方法返回类型中实现约束std::enable_if通过利用SFINAE http://en.cppreference.com/w/cpp/language/sfinae.

template <unsigned int N> class myclass
{
public:
    template <typename... Args>
    typename std::enable_if<(are_same<double, Args...>::value && sizeof...(Args) == N), void>::type
    /* void */ mymethod(Args... args)
    {
        // Do interesting stuff
    } 
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接受给定数量的双精度数的可变参数模板方法? 的相关文章

随机推荐

  • 将一些包从基本环境克隆到另一个环境

    我安装了蟒蛇 所以我已经安装了很多软件包 现在我创建了一个新的环境 几乎是空的 并开始向其安装一些特定的软件包 我这台机器上没有互联网 所以我需要将轮子或源文件复制到它 好的 它可以工作 但是当我在基本环境中已经有像 numpy 这样的包时
  • Swift:将不受约束的泛型类型转换为确认可解码的泛型类型

    情况 我有两个通用类 它们将从 api 和数据库获取数据 分别说 APIDataSource 和 DBDataSource 创建视图模型时 我将在视图模型中注入两个类中的任何一个 视图模型将使用该类来获取所需的数据 我希望视图模型与这两个类
  • 给div设置style='height:100%'是什么意思?

    SO上有很多与此相关的问题 但我扫描的都是针对详细的具体情况 我想知道的是 在概念层面上 这意味着什么 div style height 100 100 有多高 100 什么 EDIT 跟进问题 如果100 代表parent的高度 但是pa
  • scikit-learn 分类器的小批量训练,我提供小批量

    我有一个非常大的数据集 无法加载到内存中 我想使用这个数据集作为 scikit learn 分类器的训练集 例如LogisticRegression 是否有可能在我提供小批量的情况下对 scikit learn 分类器进行小批量训练 我相信
  • 如何获取某种类型的所有小部件?

    我有一个绝对面板以及不同的小部件 按钮 图像 标签等 是否可以获取特定类型的所有小部件的集合或数组或其他任何内容 例如图像 干得好 我们可以用iterator Iterator
  • 如何使用xsl打印百分位数

    我正在尝试使用 HTML 报告生成 99 jmeter results detail report 21 xsl文件 我可以使用以下代码打印 90
  • CSS 家谱与名称长度的对齐问题

    我从 CSS3 Family Tree 的实验性多父版本开始 http thecodeplayer com experiment css3 family tree 2 http thecodeplayer com experiment cs
  • C# 相当于 VB“模块”

    在 Visual Basic 中 您可以使用模块作为存储 松散 代码的位置 这些代码可以是可以从应用程序中的其他位置访问的方法和变量 而无需首先初始化某些内容 并且可以设置或更改变量状态 并将始终保持该值 我发现的最接近的是 C 中的静态方
  • 如何检查模板类型是否是变体类型的类型之一?

    考虑到变体类型和模板函数 如何检查模板类型是否是变体的类型之一 还有比下面更优雅的方式吗 typedef boost variant
  • 如何开始使用 oauth for YQL 获取历史股票数据?

    在我寻找市场数据源时 我被引导至雅虎财经的 YQL 它看起来很棒 对于公共使用 查询来说非常简单 但是公共版本的每日限制对于我的需求来说太小了 我得到了我的 yahoo ID 来开始使用 oauth 但我找不到任何好的例子关于我想做的事情
  • 如果 prevInstance 始终为 NULL,为什么它存在于 WinMain 和 wWinMain 中

    由于我是初学者 这可能是一个非常基本的问题 我正在启动 DirectX 11 在创建第一个应用程序时 使用了 wWinMain 在寻找 WinMain 和 wWinMain 之间的差异时 我遇到了这个参数 prevInstance 根据MS
  • 为什么 as_tibble() 将浮点数四舍五入到最接近的整数?

    在 dplyr 0 7 4 和 R 3 4 1 中使用 as tibble 时 我得到以下输出 mtcars gt aggregate disp cyl data mean gt as tibble 哪个输出 A tibble 3 x 2
  • 从视频中提取音频作为 MP3 文件 C#

    我想使用 C 从视频文件中提取音频作为 MP3 音频的比特率应该能够指定 有人可以帮我解决这个问题吗 我已经看过 是否 但我不确定是否可以在不提示 CMD 的情况下使用 是否 请不要向我推荐以下文章 对于大于 700mb 的文件 它无法正常
  • 术语“add-migration”未被识别为 cmdlet 的名称

    因此 从一天到第二天 我的迁移随机停止工作 我做了添加迁移 它说它没有被识别 我正在使用 PM 因为这是一个 asp net mvc 并且前一天正在工作 add migration 术语 add migration 不被识别为 cmdlet
  • 为类属性生成随机数

    我有以下代码 from numpy import random class Person def init self name age random randint 18 65 self name name self age age 我希望
  • 使用 linq 的存储库模式

    当我使用两个不同的生成的 linq 代码时 如何实现 Rob Conery 在 MVC Storefront 1 中显示的所谓 存储库模式 我是否需要像 Fredrik Normen 所讨论的那样实现真正的存储库模式存储库模式的目的是什么
  • 如何在C++中捕获内存不足异常?

    谁能告诉我如何捕获内存不足异常 for ex try while true int i new int catch lt what should be put here exception handling 还有这个 queue
  • Google 地图 V3 上的 SVG 标记

    使用 Google Maps API v3 我的最终目的是创建一个给定长度和角度的箭头 但现在 我正在尝试创建一个 SVG 标记 我正在使用丰富的市场效用 http google maps utility library v3 google
  • MySQL count(*) 一个月内每天返回 [BLOB-2B] 而不是数字

    我将使用特定用户 ID vwr tid 计算一个月中每天的每一行 一切正常 结果显示在表格中 但有一件事 每天的计数不会出现 它变成了 BLOB xx 而不是当天的行数 这是我的代码 SELECT MONTH v YEAR V GROUP
  • 接受给定数量的双精度数的可变参数模板方法?

    template