Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 缩短C+的标准方法+;函数签名_C++_Templates_Stl_Function Declaration - Fatal编程技术网

C++ 缩短C+的标准方法+;函数签名

C++ 缩短C+的标准方法+;函数签名,c++,templates,stl,function-declaration,C++,Templates,Stl,Function Declaration,当我有特定的向量和模板包含的对象时,模板总是非常长,最后看起来就像一堆>>>>>,有时很难帮助识别边界,如下所示: std::vector< std::pair< std::string, std::set< std::string > > > std::vector>之间的空间。 只要确保使用正确的编译器标志, 例如-std=c++0x和g++。 查看更多信息和。您也可以创建一个新行,在返回类型之后断开。这就是像Clang Format这样的格式化工具所做

当我有特定的向量和模板包含的对象时,模板总是非常长,最后看起来就像一堆
>>>>>
,有时很难帮助识别边界,如下所示:

std::vector< std::pair< std::string, std::set< std::string > > >
std::vector>
是否有标准的方法来减少长度,或使物品易于区分?我的实际代码是这个类声明

我尝试过缩短函数名并键入返回值

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;
};
类事件\u生成器
{
公众:
虚拟~Event_Maker(){};
//这一个,这一个非常突出
虚拟std::vector>传输_事件(void)=0;
};
是否有标准的方法来减少长度,或使物品易于区分

使用
typedef
键入别名非常方便,例如:

typedef std::unique_ptr<Event> EventPtr;
typedef std::vector<EventPtr> EventVector;
virtual EventVector transfer_events( void ) = 0;
更新

正如他在评论中指出的那样, 使用现代编译器,您不再需要
>>
之间的空间。 只要确保使用正确的编译器标志, 例如
-std=c++0x
g++

查看更多信息和。

您也可以创建一个新行,在返回类型之后断开。这就是像Clang Format这样的格式化工具所做的

struct EventMaker {
    virtual ~EventMaker() {};

    virtual std::vector<std::unique_ptr<Event>> 
    transfer_events() = 0;
};
struct EventMaker{
虚拟~EventMaker(){};
虚拟std::vector
传输_事件()=0;
};
C++11还引入了尾随返回类型。有些人发誓,除了它的预期用途之外,他们讨厌它

struct EventMaker {
    virtual ~EventMaker() {};

    virtual auto transfer_events() 
    -> std::vector<std::unique_ptr<Event>> = 0;
};
struct EventMaker{
虚拟~EventMaker(){};
虚拟自动传输_事件()
->std::vector=0;
};
不幸的是,我们不能在虚拟函数上使用C++14的自动返回类型推断,因为返回类型是它与派生类的契约的一部分


除非您计划编写多语言代码(即
extern“C”{};
),否则可以省略不带参数的函数上的
void
参数。

作为附加答案,在C++11中,您可以使用
using
而不是
typedef
,两者都可以实现相同的功能:

//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;
//typedef对pairstrstrstr;
使用pairstrstr=pair;
向量向量机;

您现在不再需要
>
之间的空格了吗?现在使用
不是比使用
typedef
更受欢迎吗?
g++
4.8.3版需要空格。我不知道如何使用
而不是
typedef
。C++11解决了
>
(),并扩展了
的使用。确保您在编译时启用了C++11(
-std=C++0x
)第二个链接应该是。从gcc4.3开始支持直角括号,从gcc4.7开始支持模板别名。()类似于:typedef std::vector>Event_List;:DPutting
return\u val function(void){//stuff}
实际上只是我的一个习惯,让它变得非常明显:不过,谢谢你的提示。
//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;