str*_*rgo 4 c++ function-pointers template-meta-programming
也许这是流感,或者我只是愚蠢,但我无法理解这个 Crow框架代码的一部分.我的内部C++解析器失败了.
template <typename MW>
struct check_before_handle_arity_3_const
{
template <typename T,
//this line
void (T::*)(int, typename MW::context&) const = &T::before_handle
>
struct get
{ };
};
Run Code Online (Sandbox Code Playgroud)
我知道它是模板声明中的模板参数.它看起来像是一些lambda或函数指针类型参数......但是,我不确定.有人可以解释这一行吗?
更新: 探索新获得知识的深度 - 在给出答案后 - 让我从一本好书中摘录:
模板可以接受指向函数的指针作为非类型模板参数.(在本书中,非类型模板参数通常是整数值.)[...]使用指向函数的指针作为非类型模板参数意味着我们不再需要将它存储在地图中.这个重要方面需要彻底了解.我们不需要将指针存储到函数的原因是编译器具有关于它的静态知识.因此,编译器可以对蹦床代码中的功能地址进行硬编码.
所以,现在我知道使用这种技术的原因之一.