我正在尝试为位于基类主体中的类中的类型添加别名。
示例代码:
#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();
}
不过还有更多的工作要做,请检查输出。