自定义类型(自己的类)的 std::rank 的实现

Posted

技术标签:

【中文标题】自定义类型(自己的类)的 std::rank 的实现【英文标题】:Implementation of std::rank for custom type (own class) 【发布时间】:2019-09-21 15:05:57 【问题描述】:

我尝试在自定义 Foo 类型上调用 std::rank,但没有成功。 我现在猜测它只适用于基本类型,我需要扩展类 Foo 才能使用它。 https://en.cppreference.com/w/cpp/types/rank 建议可能的实施。

我仍在学习 C++,对更高级的主题没有太多经验。 您能告诉我如何将 std::rank 添加到 Foo 吗?

#include <iostream>
#include <type_traits>

class Foo    
;

    template<class T>
    struct Foo::rank : public std::integral_constant<std::size_t, 0> ;

    template<class T>
    struct Foo::rank<T[]> : public std::integral_constant<std::size_t, rank<T>::value + 1> ;

    template<class T, std::size_t N>
    struct Foo::rank<T[N]> : public std::integral_constant<std::size_t, rank<T>::value + 1> ;

int main()

    Foo foo1[5];
    Foo foo2[5][5];

    std::cout << std::rank<Foo>(foo1);
    std::cout << std::rank<Foo>(foo2);


8:22:错误:限定名称未在“:”标记之前命名类 8:22: 错误: ':' 标记之前的预期'' 8:22: 错误: 预期 ':' token 11:17 之前的 unqualified-id:错误:'rank' 不是一个类 模板 11:27:错误:限定名没有在“:”之前命名类 令牌 11:27:错误:预期在 ':' 令牌之前有 ''

【问题讨论】:

当谈到出现问题时,请包括您遇到的编译器错误或运行时错误,而不是说“它不起作用”。 @PabloOliva,你是对的,对不起,我编辑了我的帖子。 【参考方案1】:

你不必对std::rank 做任何事情。你只需要使用decltype

Foo foo1[5];
Foo foo2[5][5];

std::cout << std::rank<decltype(foo1)>; // 1
std::cout << std::rank<decltype(foo2)>; // 2

Live demo

【讨论】:

以上是关于自定义类型(自己的类)的 std::rank 的实现的主要内容,如果未能解决你的问题,请参考以下文章

java基础:自定义类ArrayList集合

java引用数据类型(类)

Java 引用数据类型(类)

JAVA-基础-引用数据类型(类)

06_Java基础语法_第6天(自定义类ArrayList集合)_讲义

java基础第六天