`
ah_fu
  • 浏览: 227885 次
  • 性别: 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;
}

 
分享到:
评论

相关推荐

    c++的Functor修正版

    在提供的`myTestFunctor`文件中,可能包含了一个或多个示例,演示了如何创建和使用Functor来处理成员变量。通过分析这个文件,我们可以学习如何定义和实例化Functor,以及如何在实际场景中应用它。例如,它可能包含...

    matlab开发-functor

    在MATLAB中,"functor"是一个非常重要的概念,它涉及到函数对象和函数句柄的高级用法。本文将深入探讨MATLAB中的functor及其在开发中的应用,特别是在功能手柄的自动组合方面。 首先,我们需要理解什么是functor。...

    prosciutto::bacon:基于Functor的Redux副作用

    :bacon: 火腿 基于的Redux副作用 替代rxjs和redux-observable或 安装 yarn add prosciutto 用法示例 聆听任何redux动作,执行副作用,调度新的redux动作 // epics.js import { searchResponse , seachError , ...

    使用Momenergy Functors进行激光成像检测和测距:使用Momenergy Functor Index计算的M文件用于检查激光雷达图像中总线和电机等之间的差异。-matlab开发

    Momenergy函子指数公式是用MATLAB软件实现的,它建立在复方差之上,然后复值对受尊重的激光雷达扫描图像的每个方向的公共汽车和摩托车之间的差异进行更精确的物体识别分析,基于素数比的函子用于检查 momenergy 的熵...

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

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

    函数调用扩展_函数扩展_raysfrs_函数入口地址_functor_虚函数_

    函数对象(functor)是具有`operator()`的类,它表现得像一个函数,但具备类的所有优点,如封装数据、重载操作符和继承。这使得函数对象成为实现策略模式或函数式编程风格的理想选择: ```cpp class AddFunctor { ...

    Functors 简介

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

    functor-applicative-and-monad-laws:在 JavaScript 中实现的 Functor、Applicative Functor 和 Monad 定律

    Functor Law #2 (Composition): fmap (f . g) = fmap f . fmap g Applicative Functor Law #1 (Identity): pure id &lt;*&gt; x = x Applicative Functor Law #2 (Homomorphism): pure f &lt;*&gt; pure x =

    Haskell趣学指南

    - 安装GHCI (Glasgow Haskell Compiler Interpreter):一个交互式的Haskell解释器,非常适合学习和调试代码。 - 掌握基本的命令行操作:如创建文件、运行程序等。 #### 二、从零开始学Haskell - **第一个函数**:...

    functor:函数句柄的自动组合-matlab开发

    Functor 是一个带注释的函数(即具有命名输入和输出参数的 function_handle)。 使用 functor.compose 和/或 functor.combine 可以将函子的集合自动组合成新的函子我有时发现这对重构、调试和设计更大的程序很有用。...

    JS函数式编程指南

    本指南旨在提供一个全面的函数式编程学习路径,从基础概念到高级技术,通过具体的示例和详细的解释来帮助读者掌握函数式编程的核心原则。通过学习本指南,你将能够更好地理解函数式编程的优势,并能够在实际项目中...

    kategory,kotlin的函数数据类型和抽象.zip

    例如,`kategory`可能有一个名为`Functor`的类型类,它代表可以应用函数的对象。对于支持`Functor`的类型,`kategory`会提供`map`函数,允许我们对对象中的每个元素应用一个转换函数: ```kotlin functor.map { it ...

    STL入门精选课件详解

    例如,创建一个`std::vector&lt;int&gt;`容器并添加元素: ```cpp #include int main() { std::vector&lt;int&gt; numbers; numbers.push_back(1); numbers.push_back(2); numbers.push_back(3); // ... } ``` 学习STL,...

    scala函数式编程-scalaz

    - Applicative Functor:Applicative Functor是Functor的一个扩展,它不仅封装了map操作,还封装了纯函数的提升操作。它允许将多个参数的函数提升到Applicative结构中,使得函数可以被应用到多个参数上,而这些参数...

    STL入门学习

    例如,定义一个list容器并对其进行初始化如下: ```cpp #include using namespace std; list&lt;int&gt; myList; myList.push_back(1); myList.push_back(2); myList.push_back(3); ``` STL的设计理念强调了抽象和模块...

    迭代器实例

    例如,我们可以定义一个函数对象(functor)或使用lambda表达式来检查当前元素是否为查询的单词。 下面是一个简单的示例代码,演示如何使用迭代器进行文本查询: ```cpp #include #include #include bool ...

    distributive:双重穿越

    该软件包包括常见类型的实例,并包括与traverse相似的其他方法,这些方法融合了fmap的使用。 我们只需要Functor而不是Applicative一些对偶概念,因为后者在Haskell中不能有意义地存在,因为那里的所有共形体都是...

    functor:Ruby 的高阶函数

    所以对于 Ruby,我们将 Functor 定义为一个高阶函数。 本质上,函子可以根据应用于它的操作来改变其行为。 考虑以下简单示例。 f = Functor.new { |op, x| x.send(op, x) } f + 1 #=&gt; 2 f + 2 #=&gt; 4 f + 3 #=&gt; 6 ...

    OSG中的示例程序简介

    2. **使用`osgWidget`构建的弹出式菜单**:在此示例中,还展示了一个使用`osgWidget`库构建的弹出式菜单,这有助于用户交互,使得用户能够更方便地控制和调整动画效果。 #### example_osganimationhardware 此示例...

    fp-ts-kata:一个帮助熟练掌握一些基本fp-ts构造的仓库

    fp-ts-kata项目是一个专门为学习和精通fp-ts库设计的练习集合,通过一系列的编程练习,帮助开发者深入理解和应用fp-ts中的核心概念。 fp-ts库的核心理念是提供一个纯函数式的环境,其中的数据不可变,副作用被最小...

Global site tag (gtag.js) - Google Analytics