c++ - 您可以在 C++ 中为方法名称起别名吗?
问题描述
考虑我有一些简单的课程:
template<typename T>
class Vector {
public:
T first() const { return this->m_first; }
T second() const { return this->m_second; }
private:
T m_first;
T m_second;
}
现在我想在其中一些背后创造一些意义:
typedef Vector<int> Position;
typedef Vector<unsigned int> Dimension;
我还可以为新类型 Position 和 Dimension 的方法创建别名,以便对于 Position,x() 引用 frist(),y() 引用 second(),而对于 Dimension,width() 引用 first(),height()引用第二()。
或者更“快速”:拥有第一个和第二个公共,为成员变量创建别名?实际用例更复杂,但这应该显示我想要的:两个在内存中非常相似,但根据上下文调用完全不同的东西。
解决方案
您可以通过执行以下操作来实现您想要的:
class Position : private Vector<int> {
public:
auto x() const { return first(); }
auto y() const { return second(); }
};
class Dimension : private Vector<unsigned int> {
public:
auto width() const { return first(); }
auto height() const { return second(); }
};
它创建了从 的特定实例继承的新类型Vector
,并使用可公开访问的有意义的名称调用私有继承的成员函数。
这是一个演示。
推荐阅读
- php - word press admin end 断开的链接无法解决
- python - Mad lib Python,为什么下面的循环不能正常工作?
- java - 如果语句只检查一次
- mysql - 如何从同一供应商处选择产品,获取此错误子查询返回多于 1 行
- javascript - .NET JavaScript 无法检索文件
- php - 将来自 mysql 查询的 json 响应填充到另一个文件中的 html 列表
- javascript - 如何管理对异步服务的可变调用次数
- android - 如何将 ResourceBundles 与 Android Studio 和 Gradle 一起使用?
- css - CSS 不能在 Firefox 上工作,但在 chrome 上工作
- python - Keras:逐元素操作:点积或内积,numpy.matmul 等效