2015-12-15 108 views
1

有一个模板类定义模板功能采取了模板类的参数

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

我如何定义一个模板函数接受Foo任何模板参数?

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

+0

您使用省略号('...')有点不幸。你的意思是'Foo'是一个可变参数'template'还是只有一个具有任意但固定数量的参数? – 5gon12eder

+0

@ 5gon12eder编辑...谢谢! – xuhdev

+0

请贴近实际的代码,你已经尝试了什么,出了什么问题,*和*你的抽象目标是什么。伪代码是一个糟糕的主意。 – Yakk

回答

2

您可以定义一个函数模板是这样的:

template <typename ...Args> 
void f(Foo<Args...> foo) 
{ 
    // ... 
} 
+0

如果这是OP的意思,我认为这是正确的答案。 – 5gon12eder

2

最明显的方法是

template <typename... T> 
std::ostream& operator<< (std::ostream& out, Foo<T...> const& value) { 
    return out << "Foo(...)"; 
} 

这个版本比服用只是一个模板参数一个版本更加专业化。如果要使用一个模板参数定义此运算符,则需要确定模板实际上符合Foo<T...>的定义,否则将其从过载集中移除。尽管可以这样做,但在这种情况下,依赖于重载的部分排序似乎更简单。