在一行中定义多个具有相同 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::vector
或 std::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;
我是 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::vector
或 std::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;