0
가변성 템플릿으로 연주하기 요소를 합한 함수를 만들었습니다.is_arithmetic을 범용 참조로 사용하는 방법은 무엇입니까?
잘 작동하지만 전달 된 모든 인수가 숫자 형식인지 확인하기 위해 type_trait 테스트를 추가하고 싶습니다.
내가 r 값을 주면 작동하지만, lvalues를 주면 차단됩니다.
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;
}
것은 정상 보인다 is_arithmetic :: 보낸 값 = 숫자 타입 (http://en.cppreference.com/w/cpp/types/is_arithmetic)의 참조 거짓. 하지만 범용 참조의 경우 변수가 숫자인지 어떻게 테스트 할 수 있습니까? 전달 참조가 가능 이력서 자격 유형이나 같은 유형 자체에 T
참조 중 하나를 만드는 것이므로
완벽하게 작동합니다. 감사 ! – Nix