带有模板问题的指针的动态数组
Dynamic array of pointers with template problem
如何使用此类动态创建数组(这是arduino的Teensy Step库(:
class StepControl : IPitHandler, IDelayHandler
{
public:
...
StepControl();
template<size_t N> void move(Stepper* (&motors)[N], float relSpeed = 1);
...
然后这是这个类的用法,它 100% 工作但静态:
Stepper J1(0, 1), J2(2, 3), J3(4, 5), J4(6, 7), J5(8, 9), J6(10, 11);
StepControl <> controller;
Stepper *robot[] = {&J1,&J2,&J3,&J4,&J5,&J6};
controller.move(robot);
我想像这样做,但动态创建数组:
Stepper J1(0, 1), J2(2, 3), J3(4, 5), J4(6, 7), J5(8, 9), J6(10, 11);
StepControl <> controller;
int j = 4
Stepper *robot[j];
robot[0]=&J1;
robot[1]=&J2;
robot[2]=&J2;
robot[3]=&J2;
controller.move(robot);
结果: 错误:调用"步进控制<>::移动(步进器* [j]("没有匹配函数
怎么做?
目前,StepControl::move()
方法被编写为仅接受编译时已知大小的数组。这意味着,如果编译器可以计算出数组的大小,如下所示:
// size is inferred at compile time to be 6
Stepper* robot[] = {&J1,&J2,&J3,&J4,&J5,&J6};
然后,编译器可以成功地将controller.move(robot);
与以下模板实例化匹配:
void move<>(Stepper* (&motors)[6], float relSpeed = 1);
但是,如果在编译时不知道数组大小是多少,编译器就无法将调用move
与特定模板实例化相匹配。当你写的时候
int j = 4;
Stepper *robot[j];
由于j
不是编译时常量,因此robot
实际上是一个动态大小的非标准堆栈数组。一些编译器允许这样做,但结果是在编译时无法知道robot
的大小。
要解决此问题,您可以在编译时始终确定数组大小,如下所示:
if (needsToBeSix){
Stepper *robots[6] = ...;
controller.move(robots);
} else if (needsToBeFour){
Stepper *robots[4] = ...;
controller.move(robots);
}
或者,如果您确实需要动态大小的数组,请使用std::vector
:
class StepControl {
...
void move(std::vector<Stepper*>& motors, float relSpeed = 1){
// size can be queried at runtime as follows
const size_t N = motors.size();
// rest of method;
}
...
}
...
std::vector<Stepper*> robot { &J1, &J2, &J3, &J4 };
if (needTwoMore){
robot.push_back(&J5);
robot.push_back(&J6);
}
controller.move(robot);
就像改变伊格尔的想法一样。将在库中实现矢量接口,以便您可以按照建议使用它。
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空