gpt4 book ai didi

c++ - 指向成员的指针,在类中

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:53 25 4
gpt4 key购买 nike

我正在尝试从一个类中为需要指向成员的指针的模板创建一个 typedef。描述它的最佳方式是展示最小的示例代码:

template<typename T, int T::*MV>
struct Bar
{
const int &value(const T &t) const
{
return (t.*MV);
}
};

struct Foo
{
int baz;

typedef Bar<Foo, &Foo::baz> GetBaz; // Compiler error
};

typedef Bar<Foo, &Foo::baz> GetFooBaz; // Compiles just fine

int main(int argc, char* argv[])
{
Foo f = { 42 };
Foo::GetBaz b; // Fails to compile
GetFooBaz b2; // Fine

int val = b.value(f); // Fails to compile because of above
int val2 = b2.value(f); // Fine
}

我不一定死心塌地地以这种方式访问​​成员指针,只要知道变量的偏移量并让 Bar::value 函数执行诡计就可以了。

作为最后的手段,我想我可以使用 traits 类,因为这会将定义移到类之外,但我更愿意能够在所使用的变量附近声明 typedef。

并且,为了回答“你为什么要这样做”这个问题,这都是为了一个 IoC 容器,它非常接近地代表了 MEF(C# 的工作方式)。

我用的具体编译器是VC12,如果VC11也支持就好了。

谢谢

编辑:

这是错误信息

1>------ 构建开始:项目:MemVarBug,配置:调试 Win32 ------1> 内存变量错误.cpp1>memvarbug.cpp(20): error C2327: 'Foo::baz' : 不是类型名称、静态或枚举器1>memvarbug.cpp(20): error C2065: 'baz' : 未声明的标识符1>memvarbug.cpp(20): error C2975: 'MV' : 'Bar' 的模板参数无效,需要编译时常量表达式1> memvarbug.cpp(7) : 见“MV”声明========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

最佳答案

您可以使用以下技巧:将 baz 声明为 int[1];大小为 1 的数组,在这种情况下调用 baz 将返回指针,调用 *baz 将返回值。

关于c++ - 指向成员的指针,在类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com