#include <iostream>
#include <type_traits>
#include <boost/type_index.hpp>
using namespace std;
/*泛化版本*/
template<typename T>
struct FixedTraits;
/*特化版本*/
template<>
struct FixedTraits<char>
{
using m_T = int;
};
/*特化版本*/
template<>
struct FixedTraits<int>
{
using m_T = _int64;
};
template <typename T>
auto sum(const T *begin, const T *end)
{
using S = typename FixedTraits<T>::m_T;
S m_s{};
for (;;) {
if (begin == end) {
break;
}
m_s += (*begin);
begin++;
}
return m_s;
}
int main()
{
int a[2] = { 1,4 };
std::cout << sum(a, a + 2) << std::endl;
return 0;
}
通过给进去一种类型得到另一种类型。
我们计算两数之和的时候,可能会由于数据过大而造成溢出的情况,那么固定萃取就比较适合于这种场合。