gpt4 book ai didi

C++模板指向成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:19 26 4
gpt4 key购买 nike

我有一个关于 C++ 模板的理论问题。
假设我有以下代码:

Code

struct C{
int val = 15;
};

struct B{
C c;
int k = 9;
};

struct A{
template<typename T, typename FType, FType T::* Field = nullptr>
void test(T& d){
if (Field != nullptr){
int a = d.*Field;
}
}
};


int main(int argc, char *argv[])
{

A a;
B be;

a.test<B, int, &B::c::val>(be);
//a.test<B, int, &B::k>(be);
}

问题是:当我可以访问B::k 时,为什么我不能访问B::c::val 字段?
B::c::val 也是 B 的成员。还是不行?

最佳答案

B::cB 的成员,C::valC 的成员>,但没有像 B::c::val

这样的东西

你想在这里做的事情可以这样实现:

struct A {
template<typename T, typename OType, typename IType, OType T::* OField = nullptr, IType OType::* IField = nullptr>
void test(T& d){
if (OField != nullptr && IField != nullptr) {
auto a = d.*OField.*IField;
}
}
};

int main(int argc, char *argv[])
{

A a;
B be;

a.test<B, C, int, &B::c, &C::val>(be);
}

http://coliru.stacked-crooked.com/a/f89b96274218e223

当然,您可以提供成员指针作为函数参数,让编译器为您推导类型参数。

关于C++模板指向成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262173/

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