gpt4 book ai didi

c++ - 如何在模板类方法中将方法指针作为参数传递

转载 作者:行者123 更新时间:2023-11-28 00:04:56 25 4
gpt4 key购买 nike

我正在为不同类型创建容器模板。其中一种类型是 shared_ptr 对象。因此,为了避免操作数 ->. 调用对象方法的重复代码,我试图将指针作为函数参数传递给方法,但我得到了这个错误:

error: invalid use of non-static member function 'void A::show()'
{ doOperation(U::show); }

代码:

template <typename T, typename U>
class MepVector
{
private:
typedef void(U::*Operation)();
public:
MepVector() {}

void doOperation(Operation operation)
{
for(const auto& t : mepVector_)
{
(t.*operation)();
}
}

void add(T t)
{ mepVector_.push_back(t); }

void show()
{ doOperation(U::show); }


private:
std::vector<T> mepVector_;
};

class A
{
public:
A() {};
void show()
{ cout<<"udalo sie!"<<endl; }
};

int main() {
MepVector<A,A> myVector;

myVector.add(A());

myVector.show();

return 0;
}

我不想让 A::show() static

最佳答案

将其更改为:

void show()
{ doOperation(&U::show); }

但是,您还有第二个问题:

    for(const auto& t : mepVector_)
{
(t.*operation)();
}

因为 operation 是指向可变类实例函数的指针,所以必须将其更改为:

    for(auto& t : mepVector_)
{
(t.*operation)();
}

或者,Operation需要相应地重新定义:

typedef void(U::*Operation)() const;

连同 A::show 也是一个 const 方法函数:

void show() const
{ }

关于c++ - 如何在模板类方法中将方法指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230724/

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