我并不声称以下内容是一个好主意、便携、可靠或以任何方式推荐。但是,如果您正在做的是一次性的事情并且您只需要完成您的工作,您可以尝试以下方法。
您可以使用offsetof
获取第二个成员的偏移量,然后将其用作一些指针操作的步骤。例如:
#include <stddef.h> /*<- offsetof from here */
typedef struct
{
std::string a;
std::string b;
...
} datamembers;
void replace( datamembers& src)
{
size_t step = offsetof(datamembers, b); //<- get second member
for (int i = 0; i < sizeof(src); i += step) {
std::string *p = (std::string *)((char*)(&src) + i);
std::transform(p->begin() , p->end(), p->begin(), ::toupper);
}
}
请注意,这是一个糟糕的主意,GCC 甚至会警告您不要使用offsetof
这种方式。如果你想使用-Wno-invalid-offsetof
(如果你使用 GCC),你可以抑制它。
就像我说的那样,我很确定这不能保证在一天中的任何时候都适用于所有结构上的所有编译器,但是在您的特定情况下它可能对您有用,如果确实如此,也许它已经足够好了并且让你继续你的一天。
但是,如果您正在为商用喷气式客机或其他东西制作自动驾驶仪,请不要这样做。