c++ - 我可以强制可变参数模板采用特定类型的参数吗

标签 c++ templates variadic-templates

在 C++ 模板中有一个概念叫做显式模板参数规范,这意味着我可以强制编译器创建给定类型的模板函数。例如

template <class T1, class T2>

void foo(T1 t1prm, T2 t2prm) {
    /* function body */
}

foo<double, double>(1,2); 


我可以用可变模板函数做类似的事情吗?我没有特定的用例。 Variadic 模板对我来说是新的,我只是想了解新的(嗯,对我来说)概念的功能。

最佳答案

是的。

template<typename... Args>
void f(const Args&... args)
{
}

int main()
{
   f<int>(1.0, 2, 3.0);
}

这里会调用函数f<int, int, double> .

你可以这样检查

template<typename... Args>
void f(const Args&... args)
{
   using swallow = int[];
   (void)swallow{0, (std::cout << typeid(args).name() << std::endl, 0)...};
}

关于c++ - 我可以强制可变参数模板采用特定类型的参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962182/

相关文章:

c++ - 优雅地检查用户输入是否有错误

c++ - “controlled_runge_kutta”不是类模板

c++ - 将 mpl::fold 与占位符和我自己的结构事故一起使用

c++ - 默认模板参数语法

C++ 检测习语失败与继承

c++ - 编写一个从类型列表返回类型的元函数,该类型列表具有 C++11 中给定类型的 typedef

c++ - InternetReadFile 只读取 10kb

c++ - 设置网络共享文件夹只允许管理员用户

c++ - 试图仅在 C++ 中模拟 Matlab "unique"函数

asp.net-mvc - 让 SubSonic MVC 模板与我的数据库一起使用