别名模板专业化问题?

时间:2013-11-20 08:38:27

标签: c++ c++11 variadic-templates template-specialization

考虑以下代码:

#include <iostream>
#include <ratio>

template <class R1, class R2, class... RN> 
using ratio_sum = ratio_sum<ratio_sum<R1, R2>, RN...>;

template <class R1, class R2>
using ratio_sum<R1, R2> = std::ratio_add<R1, R2>;

int main()
{
    std::cout<<ratio_sum<std::ratio<3>, std::ratio<2>>::num<<std::endl;
}

崩溃时出现以下错误:

main.cpp:5:23: error: expected type-specifier before 'ratio_sum'
using ratio_sum = ratio_sum<ratio_sum<R1, R2>, RN...>;

如何解决这个问题? (因为它说明了一般问题,我不想要在可变参数版本中使用std::ratio_add的变通方法。

1 个答案:

答案 0 :(得分:1)

您的代码中有两个错误。您得到的第一个是,当您尝试使用ratio_sum<R1, R2>时未定义ration_sum<R1, R2>。对此的解决方案很简单:切换两个定义的位置。

第二个问题是在{{1}}的情况下定义类型别名时无法使用模板。