有一个模板类定义模板功能采取了模板类的参数
template <class T0, class T1, ....... > // many template parameters
class Foo { ...... }
我如何定义一个模板函数接受Foo
任何模板参数?
函数可以是operator <<
,在这种情况下,定义单个模板参数通常会破坏编译。欢迎使用C++ 11解决方案。
有一个模板类定义模板功能采取了模板类的参数
template <class T0, class T1, ....... > // many template parameters
class Foo { ...... }
我如何定义一个模板函数接受Foo
任何模板参数?
函数可以是operator <<
,在这种情况下,定义单个模板参数通常会破坏编译。欢迎使用C++ 11解决方案。
您可以定义一个函数模板是这样的:
template <typename ...Args>
void f(Foo<Args...> foo)
{
// ...
}
如果这是OP的意思,我认为这是正确的答案。 – 5gon12eder
最明显的方法是
template <typename... T>
std::ostream& operator<< (std::ostream& out, Foo<T...> const& value) {
return out << "Foo(...)";
}
这个版本比服用只是一个模板参数一个版本更加专业化。如果要使用一个模板参数定义此运算符,则需要确定模板实际上符合Foo<T...>
的定义,否则将其从过载集中移除。尽管可以这样做,但在这种情况下,依赖于重载的部分排序似乎更简单。
您使用省略号('...')有点不幸。你的意思是'Foo'是一个可变参数'template'还是只有一个具有任意但固定数量的参数? – 5gon12eder
@ 5gon12eder编辑...谢谢! – xuhdev
请贴近实际的代码,你已经尝试了什么,出了什么问题,*和*你的抽象目标是什么。伪代码是一个糟糕的主意。 – Yakk