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

Any*_*orn 3 c++ templates

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

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

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

谢谢您的帮助

Jam*_*lis 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
Run Code Online (Sandbox Code Playgroud)