关于成员变量偏移的模板语法问题

时间:2011-04-03 05:16:11

标签: c++ templates syntax

我正在使用Luabind将LUA集成到我的一个项目中,以下事情让我感到奇怪(我是一名自学初学者)

  template <class C, class D, class GetPolicies, class SetPolicies>
        class_& def_readwrite(
            const char* name
          , D C::*mem_ptr
          , GetPolicies const& get_policies
          , SetPolicies const& set_policies
        )

这个函数接受一个字符串和一个指向成员字段的指针,我明白了,令我困惑的是这里的顺序。

D C::*mem_ptr

我期待D :: C *,因为“&amp; foo :: bar”变成“foo bar :: *”......对我来说看起来很奇怪。 这背后的逻辑是什么?

1 个答案:

答案 0 :(得分:1)

如果您将DC替换为实际类型,则有意义:

struct Test{
  int member;
};

typedef int Test::*memptr;
//      ^^^ ^^^^
//       D   C
memptr p = &X::member;