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

What is a pointer to member template argument?

本文关键字:参数 指针 成员 什么      更新时间:2023-10-16

模板参数也可以是pointer to members。这意味着什么?当使用它时,有人能举个例子吗?

一个相当愚蠢的例子:结构体foo{无效操作1(({}void 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;
}

在c/c++中,变量可以使用指针引用一个值,也可以使用指向该值的指针。方法可以做同样的事情!

将其付诸实践:

#include <iostream>
int foo() {
return 4;
}
int main() {
std::cout << foo() << "n";
std::cout << (int)*foo;
}

应该输出函数返回的值,然后在单独的一行上输出函数本身的地址。这可能看起来像:

4
4198528

第二个值是我的方法foo在我的计算机RAM中的内存位置(显然第一个值是函数返回的值(。