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

时间:2016-09-13 14:33:40

标签: c++ header-files

我对C++完全不熟悉,我想知道是否有办法在一行中定义具有相同返回类型和参数类型的n个函数,以维护DRY代码。

我尝试在线搜索解决方案,但是我无法找到合适的答案。

myHeader.h

class MyClass{

public:
    . . .

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

例如,他们都返回std::vector<Dcel::Vertex*>类型并将std::vector <Dcel::Vertex*>作为参数输入。

是否可以在同一行中定义它们或n个函数?如果是,怎么做?

提前致谢。

4 个答案:

答案 0 :(得分:7)

  

是否可以在同一行中定义它们或n个函数?如果是,怎么样?

所有空格在C ++中都是平等对待的,所以当然。以下是在同一行中声明的两个函数:

T function(); T another_function();

如果您的意思是是否可以在一个完整表达式中声明多个函数,或者&#34;分享&#34;返回类型,然后是否,这是不可能的。

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

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

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

};

答案 3 :(得分:1)

您可以使用Nstd::vector来定义std::array个功能:

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;