指向成员模板参数的指针是什么?

时间:2018-07-21 21:09:25

标签: c++ templates

表明模板参数也可以是pointer to members。这是什么意思,使用时有人可以举一个例子吗?

2 个答案:

答案 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中的存储位置(显然,第一个是函数返回的值)。