缩短C++函数签名的标准方法
Standard way of shortening C++ function signatures
当我有某些向量和模板化的包含对象时,模板总是变得非常长,而结尾看起来就像一堆> > > > > > >
,有时很难分辨边界,比如:
std::vector< std::pair< std::string, std::set< std::string > > >
有没有一种标准的方法来减少长度,或者使物品易于区分?我实际的代码是这个类声明。
我已经尝试过缩短函数名称并对返回值进行类型定义。
class Event_Maker
{
public:
virtual ~Event_Maker() {};
// this one *this juts out really far v
virtual std::vector< std::unique_ptr< Event > > transfer_events( void ) = 0;
};
有没有一种标准的方法来减少长度,或者使物品易于区分?
使用typedef
键入别名可能很方便,例如:
typedef std::unique_ptr<Event> EventPtr;
typedef std::vector<EventPtr> EventVector;
virtual EventVector transfer_events( void ) = 0;
顺便说一句,你只需要>>
之间的空格,你不需要在<
之后或>
之前:
std::vector<std::pair<std::string, std::set<std::string> > >
更新
正如@Snowhawk04和@mkrieger1在评论中指出的那样,使用现代编译器,您不再需要>>
之间的空间。只要确保使用正确的编译器标志,例如CCD_ 7与CCD_。请参阅有关>>
和模板别名的更多信息。
作为一个额外的答案,在C++11中,您可以使用using
而不是typedef
,两者都可以实现相同的功能:
//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;
您还可以创建一个换行符,在返回类型之后换行。这就是Clang Format等格式化工具的作用。
struct EventMaker {
virtual ~EventMaker() {};
virtual std::vector<std::unique_ptr<Event>>
transfer_events() = 0;
};
C++11还引入了尾随返回类型。有些人发誓,除了它的预期用途之外,他们讨厌它。
struct EventMaker {
virtual ~EventMaker() {};
virtual auto transfer_events()
-> std::vector<std::unique_ptr<Event>> = 0;
};
不幸的是,我们不能在虚拟函数上使用C++14的自动返回类型推导,因为返回类型是它与派生类之间的契约的一部分。
除非您计划编写多语言代码(即extern "C"{};
(,否则可以省略不带参数的函数上的void
参数。
相关文章:
- 没有取消引用/解包对象的标准方法?
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 导入模块的标准方法
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- C++ 捕获异常后进行清理的标准方法是什么?
- memcpy 是将浮子打包到 uint32 中的标准方法吗?
- 读取二进制文件的惯用C++17标准方法是什么
- 在 c++ 中创建 dll 并在 delphi 中调用的标准方法
- 在 NTL 中构造多项式的标准方法是什么?
- C 是否具有对两个STD :: sets,vectors等进行三角比较的标准方法
- 获取非专用标准::矢量容器的标准方法<bool>
- 将结构传递到头文件的标准方法
- C 11中的标准方法是什么,可以访问std :: vector中元素n的指针
- 组合来自多个线程的数据的标准方法?
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误
- 在C++中初始化布尔向量的标准方法是什么
- 在C 中对二进制对象进行编码/解码的标准方法
- 有没有一种标准方法来确保一段代码在全局范围内执行
- 处理对存储在私有映射中的值的封装访问的标准方法,而不破坏C++中的抽象
- 是否有一种替换C风格的Bool数组的标准方法