【发布时间】:2020-08-06 10:45:19
【问题描述】:
我有一个使用两种类型的模板类:
template<typename T1,typename T2> class Foo { ... };
我需要编写一个接受任意数量的Foo 变量的函数:
template <typename T1, typename T2, typename... Others> size_t getSize(Foo<T1,T2> *f, Foo<Others>*... o) { ... };
如果我只用一个模板参数来实现class Foo,它就可以很好地工作。
但是如果有两个(或更多)参数,编译器会抱怨Foo<Others> 需要两个参数。
class Foo有多个模板参数时是否可以实现参数包转发?
【问题讨论】:
-
基本上你必须有偶数个参数在包中,并且必须使用它们来推导函数参数。这对于 C++20 的概念可能直接可行(必须考虑一下),但对于 C++17 及更早版本,需要使用多个间接方法,也许还有一些辅助类和函数。现在究竟你打算在函数本身中对模板参数做什么?这个扣款还需要吗?
-
我很确定它是重复的 - 我应该将另一个问题保存在书签中。如果是这样的话,一小时后会回来标记它。
-
不,不应该是
Foo<Others...>,因为Foo正好有两个模板参数。 -
抱歉,误读了问题。两次。
-
这里的目标是什么?是 `getSize( Foo*, Foo
*, Foo *) 吗?
标签: c++ templates variadic-templates template-argument-deduction