gpt4 book ai didi

c++ - C++ 中的模板可变参数

转载 作者:太空狗 更新时间:2023-10-29 23:08:30 25 4
gpt4 key购买 nike

模板可变参数能否用于捕获传递的模板参数本身就是模板的所有情况?

我一直在使用模板为一些基于模板的方法生成调试输出。首先,我创建了一个通用处理程序,然后将其专门用于 native 类型:

template<typename... PARAMS> struct TypeList{};

template<typename TYPE> inline void ntype(ostream &out, TypeList<TYPE>) {
out << typeid(TYPE).name();
}

template<> inline void ntype(ostream &out, TypeList<int>) {
out << "int";
}

...

然后我尝试添加第二种模板格式来捕获传递的模板类型:

template<typename ... SUB, template<typename...> class TYPE> void ntype(ostream &out, TypeList<TYPE<SUB...> >) {
ntype(out, TypeList<typename TYPE>());
out << '<';
subtype(out, TypeList<SUB...>());
out << '>';
}

其中 subtype 是一种模板方法,旨在通过参数列表递归,依次将每个应用于 ntype()。

问题是当我试图用一些效果来调用它时:

ntype<SomeClass<int> >(out, TypeList<SomeClass<int> >());

它只匹配通用的第一个模板函数——没有编译错误,但它从不匹配模板模板版本。我敢肯定这只是我缺乏理解,但是当涉及到模板模板的清晰示例时,谷歌搜索结果似乎在地面上非常薄弱,而在可变参数模板参数方面甚至更薄。

谁能解释我正在尝试的事情是否可行,如果可行,我做错了什么?

最佳答案

看来我只是打错了字——我在函数声明中的一个 TypeList 之后添加了 (),这可能是凌晨 3 点从函数调用中复制和粘贴造成的,这导致了不匹配。

所以,如果有人想知道,是的,这是可能的,并且上述是一种完全可以接受的方法。

关于c++ - C++ 中的模板可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com