变量后的两个括号
Two parentheses after variable?
>我在一种方法中有这样的东西
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 }
如果我是对的cstrIter
是类 dictionaryConstructorTable::iterator
的变量(虽然找不到这个类),从第 143 行开始,调用构造函数 autoPtr<LesModel>
并返回结果。因此,构造函数autoPtr<LESModel>
后面的括号应该是参数,由于 cstrIter 是一个变量,我想知道变量后面的两个括号是什么意思。也许我看错了什么?
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"
}
看起来dictionaryConstructorTable::iterator
重载函数调用运算符并返回某种类型,该类型也重载函数调用运算符(或仅使用内置运算符)。
将函数调用运算符的使用替换为普通成员函数可能会更清楚地了解正在发生的事情:
return autoPtr<LESModel>( cstrIter.foo().bar(U, phi, transport, turbulenceModelName));
看起来像OpenFOAM,它有自己的哈希表实现。
如果你查看src/OpenFoam/containers/HashTable/HashTable/HashTable.H,第454行(至少在我的副本中),你会发现iterator
重载operator()
,operator*
返回对迭代器当前引用值的引用。
澄清一点,C++允许您重载许多用于提供特定于域的功能的运算符。这允许vector.add(otherVector)
使用vector + otherVector
的"明显"句法糖。缺点是显而易见的东西并不总是那么明显,正如这个问题所表明的那样。
此结构
cstrIter()(U, phi, transport, turbulenceModelName)
意味着首先使用默认构造函数创建 cstrIter 类型的临时对象
cstrIter()
之后,函数调用运算符用于此对象
cstrIter()(U, phi, transport, turbulenceModelName)
更清楚的是,您可以通过以下方式重写表达式
cstrIter obj;
obj(U, phi, transport, turbulenceModelName);
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 为什么动态分配的两个变量的内存位置不是连续的?
- 是否可以在C++中使用宏交换两个变量的出现?
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 正确证明C 中的两个变量合理(我想将它们视为一个变量)
- 可视C 编译器将相同的存储位置提供给两个变量
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- 在rootframework中的根文件中编写两个变量
- 最短路径,带有两个变量
- 加入两个变量和LCD打印
- 在循环中声明两个变量以逆转字符串?在C 中
- 具有两个变量的"for"循环,一个变量每次迭代递增,每隔一次迭代递增
- 如何在C++中使用一个类中两个变量的值
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 如何在我存储的两个变量之间生成随机数