缩短 C++ 函数签名的标准方法
Standard way of shortening C++ function signatures
当我有特定的向量和模板化包含的对象时,模板总是变得很长,最后看起来就像一堆 > > > > > > >
有时很难辨别边界,像这样:
std::vector< std::pair< std::string, std::set< std::string > > >
是否有减少长度或使项目易于区分的标准方法?我的实际代码是这个 class 声明。
我已经尝试缩短函数名称并键入定义 return 值。
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;
};
Is there a standard way to reduce the length, or to make the items easily distinguishable?
使用 typedef
的类型别名会很方便,例如:
typedef std::unique_ptr<Event> EventPtr;
typedef std::vector<EventPtr> EventVector;
virtual EventVector transfer_events( void ) = 0;
顺便说一句,你只需要 >>
之间的 space,你不需要在 <
之后或 >
:
之前
std::vector<std::pair<std::string, std::set<std::string> > >
更新
正如 @Snowhawk04 and @mkrieger1 在评论中指出的那样,
使用现代编译器,您不再需要 >>
之间的 space 。
只要确保使用正确的编译器标志,
例如 -std=c++0x
和 g++
。
查看更多信息 about >>
and template aliases。
您也可以只创建一个在 return 类型之后换行的新行。这就是像 Clang-Format 这样的格式化工具所做的。
struct EventMaker {
virtual ~EventMaker() {};
virtual std::vector<std::unique_ptr<Event>>
transfer_events() = 0;
};
C++11 还引入了 Trailing-Return-Type。有些人发誓在其预期用途之外讨厌它。
struct EventMaker {
virtual ~EventMaker() {};
virtual auto transfer_events()
-> std::vector<std::unique_ptr<Event>> = 0;
};
不幸的是,我们不能在虚函数上使用 C++14 的 Auto Return 类型推导 ,因为 return 类型是它具有的契约的一部分推导 类.
除非您打算编写多语言代码(即 extern "C"{};
),否则您可以在不带参数的函数上省略 void
参数,.
作为附加答案,在 C++11 中你可以使用 using
而不是 typedef
,两者完成同样的事情:
//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;
当我有特定的向量和模板化包含的对象时,模板总是变得很长,最后看起来就像一堆 > > > > > > >
有时很难辨别边界,像这样:
std::vector< std::pair< std::string, std::set< std::string > > >
是否有减少长度或使项目易于区分的标准方法?我的实际代码是这个 class 声明。
我已经尝试缩短函数名称并键入定义 return 值。
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;
};
Is there a standard way to reduce the length, or to make the items easily distinguishable?
使用 typedef
的类型别名会很方便,例如:
typedef std::unique_ptr<Event> EventPtr;
typedef std::vector<EventPtr> EventVector;
virtual EventVector transfer_events( void ) = 0;
顺便说一句,你只需要 >>
之间的 space,你不需要在 <
之后或 >
:
std::vector<std::pair<std::string, std::set<std::string> > >
更新
正如 @Snowhawk04 and @mkrieger1 在评论中指出的那样,
使用现代编译器,您不再需要 >>
之间的 space 。
只要确保使用正确的编译器标志,
例如 -std=c++0x
和 g++
。
查看更多信息 about >>
and template aliases。
您也可以只创建一个在 return 类型之后换行的新行。这就是像 Clang-Format 这样的格式化工具所做的。
struct EventMaker {
virtual ~EventMaker() {};
virtual std::vector<std::unique_ptr<Event>>
transfer_events() = 0;
};
C++11 还引入了 Trailing-Return-Type。有些人发誓在其预期用途之外讨厌它。
struct EventMaker {
virtual ~EventMaker() {};
virtual auto transfer_events()
-> std::vector<std::unique_ptr<Event>> = 0;
};
不幸的是,我们不能在虚函数上使用 C++14 的 Auto Return 类型推导 ,因为 return 类型是它具有的契约的一部分推导 类.
除非您打算编写多语言代码(即 extern "C"{};
),否则您可以在不带参数的函数上省略 void
参数,.
作为附加答案,在 C++11 中你可以使用 using
而不是 typedef
,两者完成同样的事情:
//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;