gpt4 book ai didi

c++ - 如何在编译时计算类成员的偏移量?

转载 作者:IT老高 更新时间:2023-10-28 22:38:40 38 4
gpt4 key购买 nike

给定 C++ 中的类定义

class A
{
public:
//methods definition
....

private:
int i;
char *str;
....
}

是否可以在编译时使用 C++ 模板元编程计算类成员的偏移量?该类不是 POD,可以有虚方法、原语和对象数据成员。

最佳答案

基于 Matthieu M. 的回答,但更短且没有宏:

template<typename T, typename U> constexpr size_t offsetOf(U T::*member)
{
return (char*)&((T*)nullptr->*member) - (char*)nullptr;
}

它是这样称呼的:

struct X { int a, b, c, d; }

std::cout << "offset of c in X == " << offsetOf(&X::c);

编辑:

杰森赖斯是正确的。这不会在 C++11 中产生实际的常量表达式。鉴于 http://en.cppreference.com/w/cpp/language/constant_expression 中的限制,这看起来不太可能-- 特别是没有指针差异,reinterpret_cast可以在常量表达式中。

关于c++ - 如何在编译时计算类成员的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180842/

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