带有identity参数的C ++模板实例化

时间:2010-06-09 01:50:13

标签: c++ templates

我遇到了另一个我不明白的问题。

以下没有实例化(参数实例化失败),为什么?

template<class E>
void operator[](typename boost::mpl::identity<E>::type e) const;

谢谢你的帮助

2 个答案:

答案 0 :(得分:10)

identity可用于强制您明确指定模板参数。它有效地防止了函数参数参与模板参数推导。

限定类型名称是非推断的上下文之一;也就是说,identity<E>::type不会用于推导E的模板参数。

例如,如果你有:

template<class E>
void f(typename boost::mpl::identity<E>::type e) { }

f(42);      // won't work
f<int>(42); // works

答案 1 :(得分:0)

这似乎非常多余。 identity<E>::type保证等同于E,为什么不将模板声明为:

template<class E>
void operator[](E e) const;