据我所知,C ++没有自己的时间计算类,所以我们可以使用C库的功能。
所以,我决定创建一个C ++包装器类,它使用struct timespec和调用函数,它们与struct timespec一起使用。由于结构和类在C ++中几乎相同,因此类可以继承结构。所以,我可以像这样继承struct timespec:
class Time: timespec {
public:
Time();
Time(int mseconds);
Time operator+(Time& t1);
friend std::ostream& operator<<(std::ostream& os, const Time &t);
};
现在的问题是: 在C中,我们这样做是为了获得当前的单调时间:
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);
在我的C ++类中,我希望构造函数使用当前时间初始化类。
Time::Time()
{
clock_gettime(CLOCK_MONOTONIC,this);
}
使用像struct timespec指针这样的指针。
编译好,但是......
这样安全吗?是否有保证,它应该有效?
继承类时,指向派生类的指针与指向基类的指针兼容。但是这个指针是否与指向C struct的指针兼容,传递给C函数?
答案 0 :(得分:3)
从构造函数传递this
的特定示例是安全的,因为clock_gettime
的形式参数类型是const struct timespec *
(它转换指针,调整任何可能的偏移量)。
该标准对从构造函数传递this
施加了一些限制。基本上它涉及在构造完成之前回调对象。但你不是那样做的。
但是,为什么不使用数据成员而不是继承呢?而不是担心它?
顺便说一下,请注意,从C ++ 11开始,C ++现在具有<chrono>
标题,具有更高级别的时间效用。