在C ++中,我可以使用箭头运算符访问另一个运算符吗?

时间:2016-03-30 12:41:07

标签: c++ operators

我有一个指向某个仿函数的指针。

class Functor {
public:
    double operator()(int arg) {
        return 0;
    }
};

Functor* functorInstance = new Functor();

我必须这样称呼它吗?

double result = (*functorInstance)(arg);

或者在这种情况下是否有某种方法可以使用->

1 个答案:

答案 0 :(得分:1)

如果它是FUNCTOR,而不是您之前说过的功能,可以使用 - >来调用它。语法你需要做的是functor-> operator()(args)。

如果要将函数转换为仿函数,可以像这样编写模板:

#include <iostream>

template <typename ret_t, typename... args_t>
class myfunctor{

  private:
    ret_t (*funct)(args_t...);

  public:
    myfunctor (ret_t (*function)(args_t...)){
      funct = function;
    }

    ret_t operator()(args_t... args){ return (*funct)(args...);}
};


int test(int a){
  std::cout << a << std::endl;
  return a;
}


int main(){
  myfunctor<int, int> t(&test);
  t(3);  
  myfunctor<int, int> * t2 = new myfunctor<int, int>(&test);
  t2->operator()(3);
  (*t2)(3);

}