gpt4 book ai didi

c++ - C++将指向成员的指针作为模板参数传递

转载 作者:行者123 更新时间:2023-12-02 10:07:44 32 4
gpt4 key购买 nike

我有一堆非常相似的功能:

void foo1(Obj o) {
bar(o.a);
}

void foo2(Obj2 o) {
bar(o.b);
}

void foo3(Obj3 o) {
bar(o.c);
}

如何减少代码重复?我可以做类似的事情吗?

template<typename T, pointerToMember>
void foo(T o) {
bar(o.pointerToMember);
}

然后创建所有函数,例如:
foo<Obj, Obj.x>;
...

最佳答案

是的,可以有一个指向成员的指针作为模板参数:

#include <string>

struct Obj {
int a,b,c;
};

void bar(int x){}

template<typename T, int (T::*pointerToMember)>
void foo(T o) {
bar(o.*pointerToMember);
}
int main() {
Obj x;
foo<Obj,&Obj::a>(x);
}

但是,有不同的方法可以使通话变得不太冗长。您可以将成员指针作为参数进行传递,以推断出该指针,从而可以将其称为
foo(x,&Obj::a);

最后同样重要的是,您可以直接调用 bar
bar(x.a);

关于c++ - C++将指向成员的指针作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59325655/

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