enable_if'ed模板化模板构造函数的类型签名?
我通常会声明我的类和模板,然后在(在相同的头文件中)之后定义它们的方法。我发现这种方式更容易阅读。好吧,我遇到过一个案例,我无法弄清楚在一个类外定义中使用的工作类型签名。这是我正在做的一个简化示例,它说明了问题:
template <class T>
struct Foo
{
Foo(T a, T b);
template
< class Iterator
, enable_if< is_iterator<Iterator> >
>
Foo
( Iterator first
, Iterator last
);
};
template <class T>
Foo<T>::Foo(T a, T b)
{ ... }
template <class T>
template
< class U
, WHAT_GOES_HERE?
>
Foo<T>::Foo(U f, U l)
{ ... }
我在WHAT_GOES_HERE
插槽中尝试了很多东西来尝试获得匹配的签名,但我一直都失败了。我需要enable_if来区分一个传入两个T类型对象的情况,以及一个传递一对迭代器的情况。如果模板化的构造函数在主模板中定义,代码工作正常,这是代码当前的工作方式,但我更倾向于将定义移到声明之外。
编辑:我应该提一下,我不能在定义中重新使用enable_if&lt; ...>,因为enable_if&lt; ...>为其类型分配了一个默认值,在非定义中你不能这样做也是一个宣言。
没有找到相关结果
已邀请:
4 个回复
孝铜差
这直接来自
的文档。
场竟矩喘崩
类型特征,所以我使用C ++ 0x类型特征和实用程序库重新设计了您的示例。它应该与TR1和Boost库的工作方式相同。]
盛虱
细屠截殴些