别名模板专用化问题

Alias template specialization issue?

本文关键字:问题 专用 别名      更新时间:2023-10-16

考虑以下代码:

#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的解决方法)。

您的代码中有两个错误。第一个问题是,当你尝试使用ratio_sum<R1, R2>时,它没有被定义。解决方案很简单:切换两个定义的位置。

第二个问题是,在ration_sum<R1, R2>的情况下,定义类型别名时不能使用模板。