为什么我不能为位于基类中的类中的类型设置别名
Why can I not alias the type in class located in a base class?
我正在尝试为位于基类主体中的类中的类型添加别名。
示例代码:
#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();
}
不过还有更多的工作要做,请检查输出。
相关文章:
- 在Qt中注册自定义元类型的别名类型
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 将变量设置为类型模板
- 是否可以为模板类的模板函数成员设置别名?
- 为什么此模板定义了一组匹配void的别名类型
- 为什么我不能为位于基类中的类中的类型设置别名
- 如何返回类中别名类型的值
- 在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名
- 如何使用模板函数设置不同类型的值
- 依赖于参数的查找在来自另一个命名空间的别名类型上意外行为
- 为什么我不能用"unsigned"限定别名类型?
- 使用常量引用为变量设置别名
- 如何为模板专用化设置别名
- 如何为静态模板方法设置别名
- CMAKE 3.3.2:在CMakeLists.txt中设置生成类型
- 使用常量设置变量类型
- 正在设置数据类型
- 为opencv c++函数设置边界类型:erode()
- 当涉及到友谊时,为什么别名模板会与别名类型模板区别对待