变量后的两个括号?

Str*_*ght 2 c++ constructor parentheses

我在一种方法中有这样的东西

    autoPtr<LESModel> LESModel::New   
 95 (
 96  const volVectorField& U,
 97  const surfaceScalarField& phi,
 98  transportModel& transport,
 99  const word& turbulenceModelName
100 )
101 {
     ...
122  dictionaryConstructorTable::iterator cstrIter =                       
123  dictionaryConstructorTablePtr_->find(modelType);
     ...
143  return autoPtr<LESModel>      
144  (
145  cstrIter()(U, phi, transport, turbulenceModelName)
146  ); 
147  }
Run Code Online (Sandbox Code Playgroud)

如果我是对的cstrIter是类的变量dictionaryConstructorTable::iterator(虽然找不到这个类)并且从第143行开始,autoPtr<LesModel>调用构造函数并返回结果.autoPtr<LESModel>因此,构造函数之后的括号应该是参数,因为cstrIter是一个变量,我想知道变量之后的两个括号是什么意思.也许我误读了什么?

bam*_*s53 7

C++支持"运算符重载",这意味着您可以定义支持语法的类型a + b.这通过定义具有诸如的名称的函数来工作operator+.当可重载运算符与用户定义类型一起使用时,C++将查找具有这些特殊名称的函数,并且如果找到合适的函数,则将运算符视为对函数的函数调用.

一个可以重载的运算符是函数调用运算符.operator()当您使用对象名称时,将调用名为的成员函数,就好像它是一个函数:

struct S {
  void operator() (void) {
    std::cout << "Hello, World!\n";
  }
};

int main() {
  S s;
  s(); // prints "Hello, World!\n"
}
Run Code Online (Sandbox Code Playgroud)

它看起来像dictionaryConstructorTable::iterator重载函数调用操作符并返回一些类型,它也会重载函数调用操作符(或者只是使用内置操作符).

用普通的成员函数替换函数调用操作符的使用可能会使发生的事情更清楚:

return autoPtr<LESModel>( cstrIter.foo().bar(U, phi, transport, turbulenceModelName)); 
Run Code Online (Sandbox Code Playgroud)