- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何 self 记录在另一个特定库中使用的类型别名?
在下面的示例中,类 User
定义别名 User::type
应该只在类 Library
中引用通过T::type
.
这是图表:-
Library<T>
预期只有 T
定义了某个别名(例如本例中的 T::type
)。
#include <iostream>
class Base{}; //dummy for the sake of example
template<class T>class Library{
Base* t=nullptr;
public: typename T::type getValue(){return static_cast<typename T::type>(t);}
//some complex function, e.g. T::aType::doSomething()
};
在真实案例中,Library<T>
预期的许多别名,例如T::aType
, T::bType
, T::callbackType
等
要使用上述库,::type
必须定义,例如如下:-
class Derived : public Base{}; //dummy for the sake of example
class User{
public: using type=Derived*;//<-- poorly documented
//... other alias e.g. aType=int*, bType=SomeClass*
//... other complex functions
};
这是用法 ( full demo ):-
int main(){
Library<User> lib;
lib.getValue();
std::cout<<"OK"<<std::endl;
}
注意 User::type
确实缺乏 self 证明。
在现实生活中,大多数编码人员——包括设计它的编码人员——忘记了什么 User::type
是为了。
User::type
未在内部引用 User.h
,因此它很容易被一些编码人员随机删除。
我觉得我们心爱的代码从内部腐烂了,我想办法挽救它。
如何 self 记录类型别名以指示它是如何/在何处调用的??
class User{
/** It is used for Library.h */
public: using type=Derived*;
它变得非常快,我仍然更喜欢使用 C++ 语义而不是随机注释。
class User{
/** It is used for Library.h */
public: using LIBRARY_type=Derived*;
很乱
注意:这个问题类似于How to self-document a callback function that is called by template library class? , 但这个是关于 type-def
而那个是关于 callback
.
最佳答案
看来您这里唯一的实际问题是“它是一个容易被某些编码人员随机删除的目标”。
解决这个问题的方法不是沉迷于 self 记录和名称,而是建立同行评审和回归测试。为什么您团队中的编码人员会“随机删除”一些东西并逍遥法外?这需要停止。
您可能可以通过简单的代码注释来避免必须回滚此类更改的管理难题:
/**
* Provided for use by Library.
*/
using type=Derived*;
就是这样。这就是你所需要的。它一点也不“脏”——它告诉其他编码人员为什么存在 type
声明,并且如果有人将其删除,它会像 diff
中的拇指一样突出。然后你可以问他们,“你是如何得出库不再需要这个声明的结论的,为什么删除它值得破坏我们的 API?”
简而言之,这只是人的问题。在名为 type
的成员类型标准库中有大量示例,因此从技术角度来看,您已经在做您应该做的事情。不要试图用能反射(reflect)类型预期用途的名称来硬塞;让名称描述它是什么。 C++ 委员会在 std::move
上犯了同样的错误!
关于c++ - 自文档一个类型别名(typedef)以表明它将在另一个特定类中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109929/
是否有一种标准方法可以表明 R 包是专有的,归公司所有,不应在公司外部共享?现在,我在 DESCRIPTION 中使用它文件: License: Proprietary, ownership of X
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个方法可以根据 3 个正则表达式验证字段并根据失败的表达式返回错误。 function mfpValidateValue() { var pCtrl = window.document.
这个问题已经有答案了: Order of from and to values in SQL Between (3 个回答) 已关闭 4 年前。 我正在尝试从 leads 获取上周的数据表但是当我使用
我正在编写一个 pygame 代码来制作汽车游戏。这是一款基本的汽车游戏,英雄 Sprite 汽车应该避免与敌方 Sprite 接触。因此,对于碰撞部分,我们必须为敌车和英雄车创建一个 mask 。
我有一个情况,当满足某些条件时,该集团根本不产生任何状态(忽略所有事件)。当向bloc添加新事件时,如何测试没有状态产生? 我正在使用 flutter_bloc:^ 3.1.0 和 bloc_test
当我运行包含NAudio库的程序时,出现以下错误,“由于其保护级别而无法访问”。 public void ReadWaveHeader(Stream stream) { this.dataCh
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
如果我运行以下命令: from dateutil import parser parser.parse("Wind10_463@Y2014_M11_D19", fuzzy=True) 我明白了: da
我正在尝试解决第 6 章 - 点定位的“计算几何算法和应用,第 3 版 - de berg 等人”一书的一些练习。不幸的是,我不知道如何解决以下练习: Given a convex polygon P
我是一名优秀的程序员,十分优秀!