很抱歉,如果这个问题重复。
tl; dr:
How to :
struct t{ float[3] smthng = {9,1,2,3}; };
float a = (float*)&t; // to get an 9;
因此,我目前正在尝试通过将 python 概念转换为 C ++ 来节省内存空间。
这个想法是制作一个步进对象计时器(X = X0 + I*STEP
),该计时器将在每次调用时增加自身并返回存储在其中的当前值。因此,当我需要使用频率公式进行波动时,我可以通过当前值计时器值。
我不能使用数组或列表,因为我需要操作的不仅仅是步进功能,例如在一定间隔后将其重置,添加定相和不同的起点等等。
因此,我已经构造了当前,步和结束浮点的结构,但是现在我需要能够在其上进行范围循环,并且只能引用当前属性(在这种情况下,步和结束是私有的。 / p>
计时器结构
struct timer{
private:
void reset(){ // resets a current slot
this->curr = 0.0f;
}
bool check(){ // checks if the next steps overflows the limit
return (( this->curr+this->step) < this->end );
}
public:
float curr,step,end;
timer(){
this->curr = 0.0f;
this->step = 1.0f;
this->end = 10.0f;
}
template < class N, class T >
timer( N step, T end ){
this -> curr = 0.0f;
this -> step = (float) step;
this -> end = (float) end;
}
template < class N >
timer( N end ){
this -> end = (float) end;
}
};
std::ostream& operator<< (std::ostream &out, timer &data) {
out<< "f(x) = "
<<"I*" << data.step
<< " [ "<< data.curr <<" / " << data.end << " ]";
return out;
}
因此,在处理__begin
和__end
方法之前,我要做的就是简单:
timer obj;
float a = &obj; // and to get an obj.current value
我尝试重载operator&
,operator*
等。但是每次我尝试读取 timer struct 的内存时,我得到的只是转换错误。
那么有谁知道如何将结构内存作为特定类型引用?
答案 0 :(得分:3)
您可以定义一个转换运算符:
struct timer{
// ...
operator float() const {
return curr;
}
这使类可以隐式转换:
float a = obj;
从技术上讲,&obj
的确切语法是可以实现的,但是单进制operator&
的重载是可怕的设计。
答案 1 :(得分:1)
尽管the answeer by @eerorika提供了一个出色的工作解决方案,但我认为最好使用更直接的方法来获取当前时间,而不要依赖强制转换运算符。
struct timer
{
// ...
float getCurrentTime() const
{
return curr;
}
}
Timer timer;
float cur = timer.getCurrentTime();
比
更具可读性Timer timer;
float cur = timer;