本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++11 – 解析并获取可变参数模板中的所有参数
原文链接:https://www.stubbornhuang.com/1773/
发布于:2021年10月27日 17:36:04
修改于:2021年10月27日 17:36:04
1 C++11解析并获取可变参数列表中的所有参数
C++11的新特性--可变参数模板(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。
以下例子解析了可变模板参数,并将模板参数打印输出。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class ArgBase
{
public:
ArgBase() {}
virtual ~ArgBase() {}
virtual void PrintArgs() = 0;
};
template <typename T>
class Arg : public ArgBase
{
public:
Arg(T arg) : m_Arg(arg) {}
virtual ~Arg() {}
virtual void PrintArgs()
{
std::cout << m_Arg << std::endl;
}
public:
T m_Arg;
};
class ArgArray : public std::vector<ArgBase*>
{
public:
ArgArray() {}
~ArgArray()
{
std::for_each(begin(), end(), [](ArgBase* p) { delete p; });
}
};
template <typename T>
static void ParseArgs(ArgArray& argArray, T t)
{
argArray.push_back(new Arg<T>(t));
}
template<typename T, typename ...Args>
static void ParseArgs(ArgArray& argArray, T t, Args&& ...args)
{
ParseArgs(argArray, t);
ParseArgs(argArray, args...);
}
template<typename ...Args>
void ParseTest(Args&&... args)
{
ArgArray argArray;
ParseArgs(argArray, args...);
// 打印可变参数列表中的参数
for (int i = 0; i < argArray.size(); ++i)
{
argArray[i]->PrintArgs();
}
}
int main()
{
ParseTest(1, "hello", "world", 3.1415926);
getchar();
return 0;
}
执行结果:
当前分类随机文章推荐
- C++ - std::map - 存储动态指针时正确释放内存 阅读4262次,点赞1次
- C++11/std::thread - 线程管理join/detach 阅读2401次,点赞0次
- Centos7 编译C++项目错误解决 : terminate called after throwing an instance of 'std::regex_error' 阅读2593次,点赞1次
- C++ - 在两个互有依赖关系的类中使用std::shared_ptr和std::weak_ptr进行内存管理 阅读738次,点赞0次
- C++ - 智能指针的正确使用方式 阅读611次,点赞0次
- C++STL容器 – std::vector容器修改、元素操作总结 push_back,emplace_back,emplace,insert,erase,pop_back,clear,resize,swap 阅读1044次,点赞1次
- C++11 - 委托机制的实现TinyDelegate 阅读1479次,点赞0次
- C++ - std::map正向遍历与反向遍历的几种方式 阅读4498次,点赞3次
- C++ - 使用正则判断字符串是否全是中文 阅读1192次,点赞0次
- C++11 - override关键字简要介绍 阅读2158次,点赞0次
全站随机文章推荐
- Centos - 更换SSH端口 阅读2912次,点赞1次
- 资源分享 - Essential Mathematics for Games and Interactive Applications(Second Edition) 英文高清PDF下载 阅读1954次,点赞0次
- 资源分享 - Computational Geometry on Surfaces - Performing Computational Geometry on the Cylinder, the Sphere, the Torus, and the Cone 英文高清PDF下载 阅读2046次,点赞0次
- 资源分享 - Real-Time Shadows英文高清PDF下载 阅读4164次,点赞0次
- 我的开源项目 - 支持C++11特性的定时器TinyTimer 阅读4117次,点赞0次
- Pytorch - .to()和.cuda()的区别 阅读845次,点赞0次
- WordPress - 新增自定义文章类型 阅读28次,点赞0次
- Modern OpenGL从零开始 - 多个帧缓存Framebuffer绘制到同一个铺满屏幕四边形Quad上 阅读2748次,点赞1次
- 资源分享 - Foundations of Physically Based Modeling and Animation 英文PDF下载 阅读3755次,点赞0次
- TortoiseGit - 本地仓库更改远程仓库URL 阅读826次,点赞0次
评论
169