什么是指向成员模板参数的指针
What is a pointer to member template argument?
模板参数也可以是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中的内存位置(显然第一个值是函数返回的值(。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)