如何将模板类的名称传递给模板参数?

用户名

我知道我们可以做到以下几点,

template <class CONTAINER>
void f(CONTAINER *c){}

int main(){
    std::vector<int> v;
    f(&v);
    std::set<int> s;
    f(&s);
}

然后,我想要一个替代方案(对我的项目来说很方便),如下所示,

template <class CONTAINER>
void f(CONTAINER<int> *c){} // the CONTAINER is the name of a template class

但是,编译器输出

error: ‘CONTAINER’ is not a template

这可能吗?

托马斯·萨布利克

您正在寻找模板template参数

#include <set>
#include <vector>

template<template<typename> typename CONTAINER>
void f(CONTAINER<int> *){}

int main(){
    std::vector<int> v;
    f(&v);
    std::set<int> s;
    f(&s);
}

“将模板模板参数匹配到兼容参数”是C ++ 17的功能。这不适用于C ++ 14,因为它std::vector具有多个模板参数。

您需要-frelaxed-template-template-args使用Clang编译此代码,请参见:功能模板中的模板模板参数P0522R0如何破坏代码?

另一种方法是将模板模板参数与可变参数模板一起使用,以避免“将模板模板参数匹配到兼容参数”

#include <set>
#include <vector>

template<class T, template<class, class...> class CONTAINER, class... Args>
void f(CONTAINER<T, Args...> *){}

int main(){
    std::vector<int> v;
    f(&v);
    std::set<int> s;
    f(&s);
}

要么

#include <set>
#include <vector>

template<template<class, class...> class CONTAINER, class... Args>
void f(CONTAINER<int, Args...> *){}

int main(){
    std::vector<int> v;
    f(&v);
    std::set<int> s;
    f(&s);
}

这适用于C ++ 11。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将参数传递给使用模板的类

如何将模板化类实例作为模板参数传递给另一个模板?

具有X类,如何将X作为模板参数传递给自身?

如何将参数传递给流星中的模板事件?

如何将枚举传递给模板参数

如何将模板作为参数传递给函数

如何将std :: less传递给类模板?

如何将指针传递给模板类的成员函数?

VueJS:如何将类传递给模板?

如何将函数指针作为类模板参数传递?

如何将模型传递给模板

Azure ARM模板-如何将链接模板的输出变量作为参数传递给另一个模板?

如何将命令传递给模板,并使其在我的后端代码中执行并传递参数?

如何将函数模板作为模板参数传递?

如何将向量元素作为参数传递给可变参数模板函数?

如何将lambda函数传递给具有模板类的类的实例化

将函数作为模板参数传递给类

将模板参数传递给基类,简洁的表示法

将指针传递给类成员作为模板参数

如何优雅地将长类型名称传递给模板参数?

如何将对象数组作为参数传递给模板

如何将2个参数从模板传递给Django中的视图?

如何将url参数传递给模板中的url标记

自定义指令,如何将参数传递给模板

我如何将Lambda表达式传递给C ++模板作为参数

我如何将参数传递给 django 模板中的模型方法?

如何将参数传递给表单模板中的请求

如何将复杂的DevOps管道模板参数传递给脚本

如何将向量(或类似向量)传递给可变参数模板