为什么我不能为位于基类中的类中的类型设置别名



我正在尝试为位于基类主体中的类中的类型添加别名。

示例代码:

#include <iostream>
#include <typeinfo>
#include <type_traits>

template <typename...Ts>
    struct X;
template <typename T, typename...Ts>
    struct X<T, Ts...> : X<Ts...>
{
    using base = X<Ts...>;
    template <typename R, int I=0>
        struct find
    {
        using type = base::template find<T, I+1>;
    };
    template <int I>
        struct find<T, I>
    {
        using type = X;
    };
}
template <>
    struct X<>
{};
int main()
{
    using type = X<int, float>;
    std::cout << typeid(type::find<float>).name();
}

这为行生成了一个错误error: expected a type

using type = base::template find<T, I+1>;

我做错了什么?

您缺少类型名称,因为 base::find 是一个依赖类型:

#include <iostream>
#include <typeinfo>
#include <type_traits>

template <typename...Ts>
struct X;
template <typename T, typename...Ts>
struct X<T, Ts...> : X<Ts...>
{
    using base = X<Ts...>;
    template <typename R, int I=0>
    struct find
    {
        using type = typename base::template find<T, I+1>;
    };
    template <int I>
    struct find<T, I>
    {
        using type = X;
    };
};
template <>
struct X<>
{};
int main()
{
    using type = X<int, float>;
    std::cout << typeid(type::find<float>).name();
}

不过还有更多的工作要做,请检查输出。

最新更新