use*_*447 2 c++ templates function-pointers
我正在通过以下代码:
template <typename String>
void test_decimals()
{
SensibleLessThan<String> mycomparison;
String lhs = "1.212";
String rhs = "1.234";
CHECK_EQUAL(mycomparison(lhs, rhs), true); // CHECK EQUAL is macro
}
Run Code Online (Sandbox Code Playgroud)
我不明白以下结构的含义:
SensibleLessThan<String> mycomparison;
mycomparison(lhs, rhs)
是mycomparison对象,函数还是函数指针?
SensibleLessThan<String>是一种类型.mycomparison是这种类型的对象.现在看来,类型重载operator(),允许它被调用,好像它是一个函数.这类对象通常称为函数对象或仿函数.与功能一样,这些对象被认为是可调用的.
举个简单的例子,这是一个adder重载的结构operator().我们可以创建该adder类型的对象,然后使用该对象,就像它是一个函数一样.
#include <iostream>
struct adder
{
int operator()(int a, int b) { return a + b; }
};
int main()
{
adder my_adder;
std::cout << my_adder(5, 6) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是在行动.实际上,C++标准库中已存在类似的类型:std::plus.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |