在一行中定义多个具有相同 return 类型和参数类型的私有函数

Define multiple private functions with same return type and parameters type in one line

我是 C++ 的新手,我想知道是否有办法在一行中定义具有相同 return 类型和参数类型的 n 个函数,以保持 DRY代码。

我尝试在网上和 SO 上寻找解决方案,但找不到合适的答案。

myHeader.h

class MyClass{

public:
    . . .

private:
    . . .
    std::vector<Dcel::Vertex*> addVertices(std::vector <Dcel::Vertex*>);
    std::vector<Dcel::Vertex*> randomPointsGetter(std::vector<Dcel::Vertex*>);
};

例如,他们都return std::vector<Dcel::Vertex*> 键入并以std::vector <Dcel::Vertex*> 作为参数输入。

是否可以在同一行中同时定义它们,或者n个函数?如果是,如何?

提前致谢。

使用 typedef 有助于减少重复,尽管它仍然不能让您在同一行上定义多个函数。

typedef std::vector<Dcel::Vertex*> VertexList;

VertexList addVertices(VertexList);
VertexList randomPointsGetter(VertexList);

Is it possible to define both of them, or n functions, in the same line? If yes, How?

在 C++ 中,所有空格都被平等对待,这是肯定的。这是在同一行中声明的两个函数:

T function(); T another_function();

如果你的意思是你是否可以在一个完整表达式中声明多个函数,或者 "share" return 类型,那么不,那是不可能的。


如果你不喜欢重复std::vector<Dcel::Vertex*>的复杂性,你可以使用别名:

using R = std::vector<Dcel::Vertex*>;
R addVertices(R);
R randomPointsGetter(R);

编辑:此 using 声明在语义上等同于 typedef,如 Josh Kelley 的回答所示。

当函数数量增加时,宏似乎是合适的:

class MyClass {

#define MY_PREFIX_DECL_FN(name) \
    std::vector<Dcel::Vertex*> name(std::vector<Dcel::Vertex*>)

    MY_PREFIX_DECL_FN(addVertices);
    MY_PREFIX_DECL_FN(randomPointsGetter);
    MY_PREFIX_DECL_FN(...);

#undef MY_PREFIX_DECL_FN

};

是的。

您可以使用 std::vectorstd::array:

定义 N 函数
std::vector< std::function(std::vector<Dcel::Vertex*>(std::vector <Dcel::Vertex*>)) > my_private_functions;
std::array< std::function(std::vector<Dcel::Vertex*>(std::vector <Dcel::Vertex*>)),N > my_private_functions;