【问题标题】:call method on every object from the same class在同一个类的每个对象上调用方法
【发布时间】:2012-06-05 19:07:41
【问题描述】:

我正在做一个 arduino 项目。

对于那些不知道 arduino 是什么的人:

arduino 是一个小电子板,带有一个可以用 C++ 编程的微控制器

由于 arduino 是一个小微控制器,它是单核 16MHz 多处理非常困难。

我已经创建了一个类,在构造函数中,它定义了一个引脚作为 pwm 输出,设置了最小衰减、最大衰减、衰减时间等。

我有方法开始衰落和停止衰落改变设定点,速度......

对于多重淡入淡出我已经做了一个更新方法。

所以当我调用 light1.update() 时,它会检查 pwm 输出是否需要更改。

现在的问题是:

我有更多的灯,所以:

light1.update();
light2.update();
light3.update();
and so on

有没有办法只写一行来对淡入淡出类的每个对象调用 update()?

【问题讨论】:

    标签: c++ oop object arduino


    【解决方案1】:

    您似乎正在寻找 Observer 模式Instance manager 模式的组合。

    每当您创建Light 的新实例时,将其添加到管理器中。当您希望触发事件时,遍历管理器中的实例并调用update

    类似:

    class LightManager
    {
        static std::vector<Light> lights;
        static void notify()
        {
           for ( size_t i = 0 ; i < lights.size() ; i++ )
               lights[i].update();
        }
        static void add(const light& l)
        {
           lights.push_back(l);
        }
    };
    
    class Light
    {
        Light()
        {
           LightManager::add(*this);
        }
    };
    

    然后你更新所有的灯:

    LightManager::notify();
    

    【讨论】:

    • 感谢您的回复,但 arduino / avr-gcc 没有任何向量或类似的东西,这是常规操作系统(linux/unix)的一个很好的解决方案。
    • 我有这样的想法,但不知道如何创建一个变量数组来存储对象,向量可能是唯一正确的方法。
    • @on8tom 好吧,你可以使用 C 风格的数组。
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多