模板类结构与元函数

请看下面元函数_if:

template <bool B, typename L, typename R>

struct _if
{
typedef R type;
};

template <typename L, typename R>

struct _if<true, L, R>
{
typedef L type;
};

执行以下代码(1):

cpp 复制代码
#include<iostream>

/// <summary>
/// _if结构
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
/// <typeparam name="B"></typeparam>
template <bool B, typename L, typename R>
struct _if
{
	typedef R type;

	_if()
	{
		std::cout << "结构1" << "\n";
	}
};

 

void main()
{
	//std::string var1 = "text"
	_if<true, int, std::string>::type var1 = "text";

	_if<true, int, std::string> a1;

}

输出:

现在上面代码中再加一个_if结构2

/// <summary>

/// _if结构2
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
template <typename L, typename R>
struct _if<true, L, R>
{
typedef L type;
};

cpp 复制代码
/// <summary>
/// _if结构
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
/// <typeparam name="B"></typeparam>
template <bool B, typename L, typename R>
struct _if
{
	typedef R type;

	_if()
	{
		std::cout << "结构1" << "\n";
	}
};

/// <summary>
/// i_if结构2
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
template <typename L, typename R>
struct _if<true, L, R>
{
	typedef L type;
};




void main()
{
	//std::string var1 = "text"
	_if<true, int, std::string>::type var1 = "text";

	_if<true, int, std::string> a1;

}

执行结果:

为什么编译不过,因为现在用的是结构:

也就是说:_if<true, int, std::string>::type var1 => int (返回整型),修改代码:

cpp 复制代码
#include<iostream>

/// <summary>
/// _if结构
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
/// <typeparam name="B"></typeparam>
template <bool B, typename L, typename R>
struct _if
{
	typedef R type;

	_if()
	{
		std::cout << "结构1" << "\n";
	}
};

/// <summary>
/// i_if结构2
/// </summary>
/// <typeparam name="L"></typeparam>
/// <typeparam name="R"></typeparam>
template <typename L, typename R>
struct _if<true, L, R>
{
	typedef L type;
	_if()
	{
		std::cout << "结构2" << "\n";
	}
};




void main()
{ 
	_if<true, int, std::string>::type var1 = 5;
	_if<false, int, std::string>::type var2 = "text";

	_if<true, int, std::string> a1;
	_if<false, int, std::string> a2;
}

输出:

这就是元函数_if原理:

_if 原函数:

cpp 复制代码
template <bool B, typename L, typename R>
struct _if{	typedef R type;};

template <typename L, typename R>
struct _if<true, L, R>{ 	typedef L type;};
相关推荐
.格子衫.几秒前
JS原型链总结
开发语言·javascript·原型模式
J ..3 分钟前
C++ Lambda 表达式完全指南
c++
麦麦鸡腿堡4 分钟前
Java_MySQL介绍
java·开发语言·mysql
于是我说4 分钟前
一份Python 面试常见问题清单 覆盖从初级到高级
开发语言·python·面试
shoubepatien4 分钟前
JavaWeb_Web基础
java·开发语言·前端·数据库·intellij-idea
跨境猫小妹11 分钟前
2025 TikTok Shop:从内容爆发到系统化深耕的商业跃迁
大数据·人工智能·算法·产品运营·亚马逊
不穿格子的程序员14 分钟前
从零开始写算法 —— 二叉树篇 1:二叉树的三种遍历(递归实现法)
算法·深度优先·二叉树遍历·fds
Qt程序员17 分钟前
从 C++11 到 C++23:枚举的原理升级与实践
c++·c++23
吧啦蹦吧17 分钟前
`org.springframework.util.ClassUtils#forName
开发语言·python
CC.GG19 分钟前
【C++】红黑树
java·开发语言·c++