使用模板类的参数定义模板函数

时间:2015-12-15 00:12:43

标签: c++ templates

有一个模板类

template <class T0, class T1, ....... > // many template parameters
class Foo { ...... }

如何使用任何模板参数定义模板函数以接受Foo

该函数可以是operator <<,在这种情况下,定义单个模板参数通常会破坏编译。欢迎使用C ++ 11解决方案。

2 个答案:

答案 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...>的定义,否则将其从重载集中删除。虽然可以这样做,但在这种情况下依赖于重载的部分排序似乎更简单。