我遇到了另一个我不明白的问题.
以下没有实例化(参数实例化失败),为什么?
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)