有一个模板类
template <class T0, class T1, ....... > // many template parameters
class Foo { ...... }
如何使用任何模板参数定义模板函数以接受Foo
?
该函数可以是operator <<
,在这种情况下,定义单个模板参数通常会破坏编译。欢迎使用C ++ 11解决方案。
答案 0 :(得分:2)
您可以像这样定义一个功能模板:
template <typename ...Args>
void f(Foo<Args...> foo)
{
// ...
}
答案 1 :(得分:2)
最明显的方法是
template <typename... T>
std::ostream& operator<< (std::ostream& out, Foo<T...> const& value) {
return out << "Foo(...)";
}
此版本比仅采用一个模板参数的版本更专业。如果您只使用一个模板参数定义此运算符,则需要确定模板实际上是否符合Foo<T...>
的定义,否则将其从重载集中删除。虽然可以这样做,但在这种情况下依赖于重载的部分排序似乎更简单。