表明模板参数也可以是pointer to members
。这是什么意思,使用时有人可以举一个例子吗?
答案 0 :(得分:1)
一个相当愚蠢的例子: 结构foo { 无效action1(){} 无效action2(){} };
template<void (foo::*pfn)()>
struct bar
{
bar(foo & f) { (f.*pfn)();
}
};
void qux()
{
foo f;
bar<&foo::action1>(f);
bar<&foo::action2>(f);
}
它还可以与编译时元编程一起使用,例如,您可以在其中提取函数的返回类型:
template<typename Fn>
struct return_type;
template<typename C, typename RetType, typename ... Args>
struct return_type<RetType (C::*)(Args...)>
{
typedef RetType type;
}
答案 1 :(得分:0)
在c / c ++中,变量可以使用指针引用一个值或指向该值的指针。方法可以做同样的事情!
将其付诸实践:
#include <iostream>
int foo() {
return 4;
}
int main() {
std::cout << foo() << "\n";
std::cout << (int)*foo;
}
应输出函数返回的值,然后在另一行上输出函数本身的地址。看起来可能像这样:
4
4198528
第二个值是我的方法foo在计算机RAM中的存储位置(显然,第一个是函数返回的值)。