gpt4 book ai didi

c++ - std::char_traits 中使用的静态方法是一种继承吗?

转载 作者:太空狗 更新时间:2023-10-29 21:16:19 24 4
gpt4 key购买 nike

我正在学习 c++ 字符串中使用的 std::char_traits,然后我意识到 std::char_traits 可用于创建自定义字符串类,如 cplusplus.com's article 中的 case_insensitive_string。 , 我将在下面粘贴代码示例。

// char_traits::compare
#include <iostream> // std::cout
#include <string> // std::basic_string, std::char_traits
#include <cctype> // std::tolower
#include <cstddef> // std::size_t

// case-insensitive traits:
struct custom_traits: std::char_traits<char> {
static bool eq (char c, char d) { return std::tolower(c)==std::tolower(d); }
static bool lt (char c, char d) { return std::tolower(c)<std::tolower(d); }
static int compare (const char* p, const char* q, std::size_t n) {
while (n--) {if (!eq(*p,*q)) return lt(*p,*q); ++p; ++q;}
return 0;
}
};

int main ()
{
std::basic_string<char,custom_traits> foo,bar;
foo = "Test";
bar = "test";
if (foo==bar) std::cout << "foo and bar are equal\n";
return 0;
}

据我所知,静态方法是类的一部分,而不是实例。所以我们不能覆盖静态方法。然而,custom_trais 类显式继承了 char_trais 类。有人知道这是怎么回事吗?谢谢。

最佳答案

OOP(旨在作为“具有虚函数的类”)和泛型编程是不同的编程范例,它们恰好以两种完全不同的方式使用 C++ 的类继承特性来实现其所需的语义。

换句话说:C++ 中的类继承本身 不依赖于特定的编程范例。

在具有类型特征的泛型编程中,OOP 原则根本不适用。你没有什么可以重写的,并且在概念上不存在基类型这样的东西。从 traits 类继承只是一种使代码更易于阅读和编写的有效方法。理论上,您不一定非要这样做,因为您可以为所有不需要专门化的成员委托(delegate)给 std::char_traits:

struct custom_traits { // <------ no inheritance

static bool eq (char c, char d) { return std::tolower(c)==std::tolower(d); }
static bool lt (char c, char d) { return std::tolower(c)<std::tolower(d); }
static int compare (const char* p, const char* q, std::size_t n) {
while (n--) {if (!eq(*p,*q)) return lt(*p,*q); ++p; ++q;}
return 0;
}

// delegate to std::char_traits:

static void assign(char& r, const char& a) {
std::char_traits<char>::assign(r, a);
}

static char* assign(char* p, std::size_t count, char a) {
return std::char_traits<char>::assign(p, count, a);
}

// and so on
};

但这有什么好处呢?只是需要编写和阅读更多代码。

关于c++ - std::char_traits 中使用的静态方法是一种继承吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com