我很想为 c++ 创建类似 javascript 的 setTimeout
和 setInterval
的功能(没有提升)。我想要实现的目标:一个基类,它可以在重复或一次延迟后调用其子类成员变量。
我已经有了一个更新
函数和时间流逝的函数。我还找到了如何将成员函数指针传递给基类并使用以下方法触发该函数:
class BaseClass {
public:
template <class object>
void triggerNow(object *obj, void (object::*func)()) {
((obj)->*(func))();
}
}
class SubClass : public BaseClass {
public:
void update() {
triggerNow(this, &SubClass::worked)
}
void worked() {
cout << "worked!";
}
}
我目前面临的问题是如何将object *obj
和void (object::*func)()
存储在 vector (或其他容器)中。我只是想弄清楚模板...
如何将 triggerNow
的两个模板化参数存储在 vector 中?一旦我弄明白了这一点,我就可以创建我的 setTimeout 和 setInterval!
最佳答案
还没有对计时功能发表评论。
但是,由于您使用的是父类和基类,我建议使用多态性,而不是模板成员函数。
class BaseClass {
public:
virtual void triggerMe() = 0;
};
class SubClass1 : public BaseClass {
public:
virtual void triggerMe()
{
//real code, do something
}
};
class SubClass2 : public BaseClass {
public:
virtual void triggerMe()
{
//real code, do something else
}
};
然后你就可以得到一个vector
指针指向BaseClass
:
vector<BaseClass*> objects;
objects.push_back(new SubClass1);
objects.push_back(new SubClass2);
for (auto it = objects.begin(); it != objects.end(); it++)
{
it->triggerMe();
}
关于c++ - 类似于 c++ 的 setTimeout 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875706/