在初始值设定项列表中采用多个参数的成员变量
member variable taking multiple arguments in an initializer list
当初始化列表中的成员变量接受多个参数时,它是如何工作的?如果我的理解是正确的,这样的变量只需要一个参数...
我遇到这个问题的实际代码如下所示,你可以发现成员group_trajectory
有三个参数。
ChompOptimizer::ChompOptimizer(ChompTrajectory* trajectory, const planning_scene::PlanningSceneConstPtr& planning_scene,
const std::string& planning_group, const ChompParameters* parameters,
const moveit::core::RobotState& start_state)
: full_trajectory_(trajectory)
, robot_model_(planning_scene->getRobotModel())
, planning_group_(planning_group)
, parameters_(parameters)
, group_trajectory_(*full_trajectory_, planning_group_, DIFF_RULE_LENGTH)
, planning_scene_(planning_scene)
, state_(start_state)
, start_state_(start_state)
, initialized_(false)
{
If my understanding is correct, such a variable takes only one argument...
这是不正确的。初始化数据成员遵循数据成员类型产生的规则。如果一个数据成员的构造函数接受一个参数,它必须像那样被初始化。如果需要三个,您必须提供三个。您显示的示例代码可能会产生误导,因为所有其他构造函数只需要一个参数 - 但这是巧合(或良好做法,考虑到长参数列表是一个缺陷)。示例:
struct A {
A(int) {} // takes one argument
A(int, double) {} // overload with two arguments
};
struct B {
B(int, int, int) {} // takes three argument
};
struct Test {
Test() :
a(42), b(42, 43, 44) {}
A a;
B b;
};
在此示例中,a(42)
也可以是 a(42, 3.14)
,因为这样的构造函数也可用。只需传递类型所需的内容即可实例化。
当初始化列表中的成员变量接受多个参数时,它是如何工作的?如果我的理解是正确的,这样的变量只需要一个参数...
我遇到这个问题的实际代码如下所示,你可以发现成员group_trajectory
有三个参数。
ChompOptimizer::ChompOptimizer(ChompTrajectory* trajectory, const planning_scene::PlanningSceneConstPtr& planning_scene,
const std::string& planning_group, const ChompParameters* parameters,
const moveit::core::RobotState& start_state)
: full_trajectory_(trajectory)
, robot_model_(planning_scene->getRobotModel())
, planning_group_(planning_group)
, parameters_(parameters)
, group_trajectory_(*full_trajectory_, planning_group_, DIFF_RULE_LENGTH)
, planning_scene_(planning_scene)
, state_(start_state)
, start_state_(start_state)
, initialized_(false)
{
If my understanding is correct, such a variable takes only one argument...
这是不正确的。初始化数据成员遵循数据成员类型产生的规则。如果一个数据成员的构造函数接受一个参数,它必须像那样被初始化。如果需要三个,您必须提供三个。您显示的示例代码可能会产生误导,因为所有其他构造函数只需要一个参数 - 但这是巧合(或良好做法,考虑到长参数列表是一个缺陷)。示例:
struct A {
A(int) {} // takes one argument
A(int, double) {} // overload with two arguments
};
struct B {
B(int, int, int) {} // takes three argument
};
struct Test {
Test() :
a(42), b(42, 43, 44) {}
A a;
B b;
};
在此示例中,a(42)
也可以是 a(42, 3.14)
,因为这样的构造函数也可用。只需传递类型所需的内容即可实例化。