gpt4 book ai didi

c++ - C++ 中的运算符()

转载 作者:行者123 更新时间:2023-11-30 00:58:00 24 4
gpt4 key购买 nike

我有一个对象,它背后有一个数学函数。它似乎是 operator() 的完美候选者。

具体来说,它是一种对球体上的每个 (phi,theta) 位置具有不同值的光。

现在的问题是,在类内部,访问 light 函数的语法很糟糕:

    double operator() ( double phi, double theta )    {        // compute light function         return sin(2*t) * cos(p) ; // (really this is implemented as a function pointer,                                   // so the light function can be changed)    }    void functionThatUsesLightFunction()    {         
  
   double val = ( 2.0, 4.0 ) ;  // seems bad
   // Whoops!  Doesn't work.         double val2 = (*this)( 2.0, 4.0 ) ; // ok         double val3 = operator()( 2.0, 4.0 ) ; // no thank you    }

但是从类之外,它得到了这样非常好的语法

    foreach( theta on 0..PI )        foreach( phi on 0..2*PI )            val += light( theta, phi ) ;

你认为我在这里误用了 operator() 吗?

最佳答案

我认为您应该在类的私有(private)部分定义另一个函数,比如 calculate,然后从 operator() 和其他成员函数中调用该函数。这样,您就不会从成员函数中调用 operator(),但您仍然可以从类外部调用它。像这样的东西:

class Light
{
private:
double calculateLight( double phi, double theta )
{
return sin(2*t) * cos(p) ;
}
public:
double operator() ( double phi, double theta )
{
return calculateLight(phi, theta);
}
//...
void functionThatUsesLightFunction()
{
double val3 = calculateLight( 2.0, 4.0 );
}
};

//Outside the class
Light light;
//...
val += light( theta, phi ) ;

加入calculateLight函数还有一个好处,可以给这个函数取一个好听的名字,增加可读性。 operator() 没有增加可读性。

关于c++ - C++ 中的运算符(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7045652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com