我对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个函数?如果是,怎么做?
提前致谢。
答案 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)
是
您可以使用N
或std::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;