首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用is_arithmetic进行通用参考?

如何使用is_arithmetic进行通用参考?
EN

Stack Overflow用户
提问于 2017-10-26 14:39:22
回答 1查看 216关注 0票数 0

使用各种模板,我创建了与元素和的函数。

它运行得很好,但我想添加一个type_trait测试,以检查传递的所有参数是否都是数字类型。

如果我给r值,它会工作,但是如果我给出L值,它就会阻塞。

代码语言:javascript
复制
    sum.h

#ifndef SUM_H_INCLUDED
#define SUM_H_INCLUDED

#include<type_traits>

template <typename T>
double sums_(T && arg)
{
    static_assert(std::is_arithmetic<T>::value,"Only numbers !");
    return arg;
}

template <typename T, typename ... Args>
double sums_(T && val, Args &&... args)
{
    return sums_(std::forward<T>(val)) + sums_(std::forward<Args>(args)...);
}

template <typename ... Args>
double sums(Args &&... args)
{
    return sums_(std::forward<Args>(args)...);
}


#endif // SUM_H_INCLUDED

    main.cpp

#include <iostream>
#include "sum.h"


int main()
{

    //works
    std::cout << sums(42.30,28) << std::endl;

    int x = 100;
    //error
    std::cout << sums(42.30,28,x) << std::endl;

    return 0;
}

这似乎很正常,因为对于数字类型(arithmetic)的引用,arithmetic= false。但是,在通用引用的情况下,如何测试我的变量是数字的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-26 14:40:52

你想要的

代码语言:javascript
复制
std::is_arithmetic<std::remove_reference_t<T>>

因为转发引用使T要么是对可能的cv限定类型的引用,要么是这样的类型本身,而is_arithmetic已经处理了cv-限定符。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46957237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档