`
ah_fu
  • 浏览: 230902 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

template学习:一个Functor的使用例子

阅读更多

#include 
<stdio.h>

// 模板,可以调用函数或者Functor
template <typename Functor>
void TestTemplate(Functor func)
...{
    func(
"TestTemplate");
}


// C函数风格
void TestFunction(const char* str)
...{
    printf(
"TestFunction:%s ", str);
}


// Functor风格
struct TestFunctor
...{
    
void operator()(const char* str)
    
...{
        printf(
"TestFunctor:%s ", str);
    }

    TestFunctor()
    
...{
        printf(
"TestFunctor() ");
    }

    
~TestFunctor()
    
...{
        printf(
"~TestFunctor() ");
    }

}
;

int main()
...{
    TestTemplate(TestFunction);  
//函数指针作为调用参数
    printf("========================================== ");
    TestTemplate( TestFunctor() );  
//Functor临时对象作为调用参数
    printf("========================================== ");
    TestFunctor obj;  
//生成一个Functor的实例
    TestTemplate<TestFunctor&>(obj);  //使用引用类型来调用,避免拷贝
    return 1;
}

 
分享到:
评论

相关推荐

    STL 应用例子 包括各容器的使用

    STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了一系列高效、可重用的数据结构和算法。这个压缩包文件包含了STL应用的多个实例,适用于VC2005编译环境,并且所有例子都...

    Functors 简介

    在这个例子中,`Simple` 类定义了一个 `operator()` 成员函数,当我们在 `main` 函数中调用 `s()` 时,实际上是调用了 `s.operator()`。 ##### 示例 2:带有参数的 Functor ```cpp #include #include class ...

    list链表实现技术

    在C++中,STL(Standard Template Library)提供了一个名为`list`的容器,它实现了双链表,支持快速的插入和删除操作。 链表与数组相比,其主要优点在于动态性。数组在创建时就需要确定大小,而链表可以在运行时...

    c++ 库STL的一些说明讲解的pdf

    C++中的STL,全称为Standard Template Library(标准模板库),是C++编程语言中一个极其重要的组成部分。它提供了一组高效、灵活且可重用的容器、算法和迭代器,帮助开发者更方便地实现数据结构和算法。STL的核心...

    数字图像处理算法实现

    在这个例子中,`Processor`是一个模板参数,它可以是一个函数指针或一个实现了operator()的类,用于在循环中处理每个像素。 最后,空间域滤波器是图像处理中的重要工具,常用于去除噪声、平滑图像或增强某些特征。...

    宏------详解.txt

    在这个例子中,先通过`PARAM(ADDPARAM(1))`得到结果,再通过`TO_STRING`将其转换为字符串。 #### 高级宏示例 - **模板元编程中的宏**:在一些高级框架中,如Boost库,宏被用来辅助实现模板元编程。例如,Boost....

    【程序设计与算法(三)第8周测验(2019秋季)】004:函数对象的过滤器

    在这个例子中,`Filter`函数使用了迭代器`ia.begin()`和`ia.end()`来访问`vector``ia`中的元素,同时`Filter`函数的返回值是一个迭代器,表示过滤操作结束的位置。 6. `Print`函数: `Print`函数是一个用于输出序列...

    learncpp:实用性

    - **继承**:一个类可以从另一个类派生,以获取其属性和方法,实现代码复用。 - **多态**:通过虚函数和接口实现,允许子类重写父类的行为,提高代码的灵活性。 **4. 异常处理** C++提供了异常处理机制,通过try-...

Global site tag (gtag.js) - Google Analytics