gpt4 book ai didi

c++ - 有没有办法创建一个以成员函数或成员作为参数的函数?

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

我有一个这样的函数:

void f(std::ofstream& ostrm)
{
auto a = Myglobal->getData1();
ostrm << a;

auto b = Myglobal->getData2();
ostrm << b;

auto c = Myglobal->m_data1;
ostrm << c;

auto d = Myglobal->m_data2;
ostrm << d;

//...
auto z = Myglobal->getData1000();
ostrm << z;
}

有没有办法创建一个函数,以成员函数成员作为参数来分解此代码?

(abc、d 和 z 不是同一类型)

最佳答案

是的,有。一种方法是转动void f到函数模板中,然后将指针传递给所需数据成员或成员函数的成员,并让 std::invoke (C++17,<functional> header )执行其余操作:

template <class PtrToMember>
void f(std::ofstream &ostrm, PtrToMember m){
ostrm << std::invoke(m, Myglobal);
}

// call like this:

f(someStream, &T::getData1);
f(someStream, &T::m_data1);

您应该在哪里替换 TMyglobal 的类型当然。 std::invoke 的好处是它自动处理所有成员(数据或函数)。

关于c++ - 有没有办法创建一个以成员函数或成员作为参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427341/

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