C++方法作为模板参数(Pointer to Member Function as Template Parameter )

本文展示了如何使用C++模板元编程来实现对类成员函数的调用。通过`mem_function_invoker`函数模板,可以传递成员函数指针并动态地调用相应的方法,包括不同参数的重载版本。示例中定义了一个`Test`结构体,并调用了其两个不同签名的`test`成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ 模板元编程


#include <iostream>
#include <type_traits>

/// pointer to class member function as template paramter
template<class _C, typename _MFN, typename ..._Args>
void mem_function_invoker(const _C &c, _MFN _C::* p, _Args &&...args) {
  (c.*p)(std::forward<_Args>(args)...);
}
struct Test {
  void test() const {
    std::cout << __FUNCTION__ << "() was called.\n";
  }
  void test(const std::string &str) const {
    std::cout << __FUNCTION__ << "(const std::string &) was called with argument as " << str << ".\n";
  }
};
int main(int argc, char *argv[]) {
  Test t;
  void (Test::*test_v1)() const = &Test::test;
  void (Test::*test_v2)(const std::string &) const = &Test::test;
  mem_function_invoker(t, test_v1);
  mem_function_invoker(t, test_v2, "Hello,C++ metaprogramming!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值