用返回子类的方法设计C++泛型类
C++ generic class design with methods which return subclass
我正在为Unicode代码点编写一个通用列表。问题是我还想要一些通用的类设计,允许专门的版本。这是一个例子。
这就是一个例子。
class
MyString
{
public:
auto getItemAt(int index) const -> UnicodePoint const;
auto subsetInRange(int index, int length) const -> MyString const;
auto getUTF8Binary() const -> std::string const;
};
这里只有一个,但实际上有很多像subsetInRange
这样的方法,所以我不想重复为其他数据类型编写它们。这导致我编写了一个通用版本超类。
template<typename T, typename FINAL_SELF_TYPE>
class
MyList
{
public:
auto getItemAt(int index) const -> T const;
auto subsetInRange(int index, int length) const -> FINAL_SELF_TYPE const;
// getUTF8Binary() removed because it's inappropriate on this abstraction level.
};
class
MyString : public MyList<UnicodePoint, MyString>
{
public:
auto getUTF8Binary() const -> std::string const;
};
最后,我不得不承认,我必须将final类类型作为模板参数传递给MyList
类,以使其正常工作。感觉不对劲。我不能说它到底是什么,但我的大脑一直在发出警告信号。我想这是因为我在抽象的普通类上放了一些专业化的信息。这似乎是循环依赖——在任何情况下都不好。这完全违背了阶级等级制度。
但当我编写一些通用类时,结果是方法返回相同的类型,我总是看到这种模式。这让我很烦恼。由于我的C++经验不多,我对自己的设计没有信心。
你觉得这种模式怎么样?好还是错?如果错了,怎么了?
请阅读有关CRTP的更多信息。它实际上是一种非常常见的设计模式。
相关文章:
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 如何在 C++ 中声明泛型类
- 在C++中分配泛型类
- 基于变量输入的泛型类方法计算
- C++处理取消引用语法的泛型类
- 用于重载的泛型类成员函数
- 将类型作为指向另一个类的对象的指针的泛型类-NOT WORKING
- 在泛型类中使用带有 CUDA 关键字的模板类
- 在类中使用泛型类成员
- 如何在main中重载运算符>泛型类.cpp
- C++泛型类中的字段/属性
- 用返回子类的方法设计C++泛型类
- C++ 堆栈泛型类,int 变量将 32765 作为值而不是 1
- 将资源移出泛型类
- C++中的泛型类
- 可以在泛型类中为一种类型提供一个可用的函数
- 如何在C++中从泛型类创建对象
- 用泛型类指针作为参数声明函数指针的正确语法是什么
- 使用具有结构成员的泛型类时发生c++编译器错误