C++ 依赖类型 函数指针

这篇具有很好参考价值的文章主要介绍了C++ 依赖类型 函数指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

依赖类型

依赖类型的概念:

依赖类型是指在模板编程中,类型依赖于模板参数的一种特殊类型, 它是通过使用模板参数来定义的, 而不是显示地指定类型。由于模板参数可以是任何类型,编译器在实例化模板时无法确定依赖类型的具体定义和属性。当使用依赖类型的时候需要使用typename关键字来告诉编译器该名称是一个类型。这是因为编译器默认将依赖名称解析为一个静态成员或静态成员函数。而不是一个类型。

案例

template<typename T>
class Num
{
public:
	using pf = T*;
	pf get_pf();
};

template<typename T>
typename Num<T>::pf Num<T>::get_pf() // 如果缺少了typename会报错C4346, pf依赖名称不是类型
{
	return Num<T>::pf;
}

 这个示例,演示了如何使用依赖类型,在这个例子中使用typename告诉编译器Num<T>::pf是一个类型。

 函数指针

将函数指针作为参数传递

typedef int(*func_pf)(int,int); // 定义一个函数指针类型

int add(int a, int b)
{
    return a + b;
}

int test_func(int a, int b, func_pf p)
{
   // 通过函数指针调用函数
    return p(a, b);
}

 函数模板趣味用法举例

template<typename T, typename F>
void test_func(const T& a, const T& b, F pf)
{
    cout << pf(a, b) << endl;
}

现在假设有如下类

class Func
{
public:
    Func() { cout << "调用构造函数" << endl; }
    Func(const Func& f) { cout << "调用复制构造函数" << endl; }
    int operator()(int a, int b)
    {
        return a + b;
    }
};

 当进行如下调用

    Func f1;
    test_func(4, 5, f1);

 此调用会导致使用复制构造函数,原因是,当将f1传递的时候函数模板会推断出,F的类型为类对象,所以传递对象时,会生成临时构造函数,导致复制构造函数的生成。

    test_func(2, 4, Func());

 这种传递则不会调用复制构造函数。

默认模板参数

类默认模板参数定义格式

template<typename T = default_type>
class ClassName
{
}

类模板函数案例:

template<typename T = int, int N = 5>
class Array
{
    //
}

Array<> arr1; // 使用默认模板参数int 和 5
Array<double, 3> // 使用double 和 3作为参数

函数模板默认参数文章来源地址https://www.toymoban.com/news/detail-623509.html

template<typename T, typename F = obj(代表一个对象)>
void testfunc<const T& a, const T& b, F function = F())

or

template<typename T, typename F = pf>
void testfunc<const T& a, const T& b, F function = func)

到了这里,关于C++ 依赖类型 函数指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ Primer Plus: 第10章(2)

    第10章编程题: (1) Account.h: Account.cpp: main.cpp: (2) Person.h: Person.cpp: main.cpp: (3) golf.h: golf.cpp: main.cpp: (4) Sales.h: Sales.cpp: main.cpp: (5) Stack.h: Stack.cpp: main.cpp: (6) Move.h: Move.cpp: main.cpp: (7) Plorg.h: Plorg.cpp: main.cpp: (8) List.h: List.cpp: main.cpp:

    2024年02月12日
    浏览(37)
  • 【C++】C++ primer plus第二章练习题

    c++程序的模块叫什么? 函数。 下面的预处理器编译指令是做什么用的? 包含头文件,将iostream文件的内容添加·到代码中 下面的语句是做什么用的? using namespace std; using是预编译器指令,让其使用std命名空间 什么语句可以用来打印短语“Hello, world”,然后开始新的一行? s

    2024年02月06日
    浏览(40)
  • C++ Primer Plus第五章编程练习答案

    答案仅供参考,实际运行效果取决于运行平台和运行软件 1.编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和则程序将出29之间所有整数的和为44 2.使用array对

    2024年02月09日
    浏览(39)
  • C++ primer plus第七章编程练习答案

    1.编写一个程序,不断要求用户输入两个数,直到其中的一个为 0。对于每两个数,程序将使用一个南数来计算它们的调和平均数,并将结果返回给 main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下: 调和平均数=2.0*xy/(x + y) 2.编写一个程序,要求用

    2024年02月10日
    浏览(32)
  • C++ Primer Plus第二章编程练习答案

    答案仅供参考,实际运行效果取决于运行平台和运行软件 1.编写一个C++程序,它显示您的姓名和地址。 2.编写一个C程序它要求用户输入一个以 long 为单位的距离,然后将它转换为码(- ng等于220码) 3.编写1个C++程序它使用3个用户定义的函数(括mai()),并生成下面的输出Three blind

    2024年02月09日
    浏览(45)
  • 【CPP_Primer_Plus】C++ IDE推荐

    C++编译器推荐 windows 推荐 Resharper++插件 vcpkg 功能介绍 编辑器 Visual Studio 的编辑器具有出色的代码补全功能、语法突出显示、快速信息提示、附带代码修复建议的错误和警告。 IntelliSense 比 IntelliCode(内置于编辑器中的 AI 工具) 调试器 顶部的绿色运行按钮可启动调试程序。

    2024年02月09日
    浏览(30)
  • C++ Primer Plus笔记: 2023.06.05 AND 2023.06.06

    1.在C++的赋值语句: 赋值将从右向左进行,首先,88被赋值给steinway,然后,steinway的值(现在是88)被赋给baldwin,然后baldwin的值88被赋给yamaha。 2.类与对象: ** 类是用户定义的一种数据类型。要定义类,需要描述它能够表示什么信息和可对数据执行哪些操作,类之于对象就像

    2024年02月08日
    浏览(31)
  • 《C++ Primer Plus》学习笔记——第5章 循环和文本输入

    C++中支持三种循环,for循环、while循环和do while循环。 for循环遍历字符串输出 输出 这里的++i通常也有人写常i++,有前缀和后缀的区别。从语义上来说,二者都是对i进行自增。但是从效率上来说,可能存在差异。通常i++会将i复制一个副本,然后加一,然后再写回,而++i则是直

    2024年02月09日
    浏览(32)
  • 《C++ Primer》第14章 重载运算与类型转换(一)

    参考资料: 《C++ Primer》第5版 《C++ Primer 习题集》第5版 重载的运算符是具有 特殊名字的函数 ,其名字有 operator 和要定义的运算符组合而成。和其他函数一样,重载运算符也具有返回类型、参数列表、函数体。 重载运算符函数的 参数数量 和该运算符的 运算对象数量一样多

    2024年01月20日
    浏览(25)
  • C++ Primer 5th 阅读笔记:变量和基本类型

    内建类型 ,如整型,字符型等; 变量 ,为值绑定的一个名字; 表达式和语句 ,操作值。 分支和循环 ,允许我们条件执行和重复执行; 函数 ,定义抽象计算单元。 自定义类型; 标准库。 学习语言的基本知识和标准库。 内建类型; 简要介绍自定义类。 定义了数据的意义

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包