variadic-mem_fn.c

来自「用于进行gcc测试」· C语言 代码 · 共 51 行

C
51
字号
// { dg-options "-std=gnu++0x" }// { dg-do "run" }// A basic implementation of TR1's mem_fn using variadic teplates// Contributed by Douglas Gregor <doug.gregor@gmail.com>#include <cassert>template<typename R, typename Class, typename... Args>class Mem_fn{ public:  explicit Mem_fn(R (Class::*pmf)(Args...)) : pmf(pmf) { }  R operator()(Class& object, Args... args)  {    return (object.*pmf)(args...);  }  R operator()(Class* object, Args... args)  {    return (object->*pmf)(args...);  }  R (Class::*pmf)(Args...);};template<typename R, typename Class, typename... Args>  inline Mem_fn<R, Class, Args...>mem_fn(R (Class::* pmf)(Args...)){  return Mem_fn<R, Class, Args...>(pmf);}class X { public:  int negate(int x) { return -x; }  int plus(int x, int y) { return x + y; }};int main(){  X x;  X* xp = &x;  assert(mem_fn(&X::negate)(x, 17) == -17);  assert(mem_fn(&X::negate)(xp, 17) == -17);  assert(mem_fn(&X::plus)(x, 17, 25) == 42);  assert(mem_fn(&X::plus)(xp, 17, 25) == 42);  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?