如何调用对象在函数内部的 class 方法
How to call a class method whose object is inside a function
如何调用 class 方法 GetItemList,该方法将另一个 class(B、C 或 D)的方法作为输入,其对象存在于 class Pro
我试试打电话
GetItemList<void, B>(&B::Show_B);
我明白了
class B' has no member named 'func'
调用std::function时如何防止创建新对象
列表对象
class A
{
};
class B : public A
{
public:
void Show_B()
{
std::cout << "Class B" << std::endl;
};
};
class C : public A
{
public:
void Show_C()
{
std::cout << "Class C" << std::endl;
};
};
class D : public A
{
public:
void Show_D()
{
std::cout << "Class D" << std::endl;
}
};
typedef std::vector<A*> List;
Class 调用模板
class Pro
{
private:
List* m_list;
public:
Pro(List* list)
{
m_list = list;
// GetItemList<void, B>(&B::Show_B);
// GetItemList<void, C>(&C::Show_C);
// GetItemList<void, D>(&D::Show_D);
}
template <typename V, typename T> void GetItemList(std::function<V(T*)> func)
{
T* pointer = nullptr;
for(auto& p : *m_list) {
pointer = dynamic_cast<T*>(p);
if(pointer != nullptr)
pointer->func();
}
}
};
主要功能
void Main()
{
List list;
list.push_back(new B);
list.push_back(new C);
list.push_back(new D);
Pro pro(&list);
}
应该是
template <typename V, typename T> void GetItemList(std::function<V(T*)> func)
{
T* pointer = nullptr;
for (auto& p : *m_list) {
pointer = dynamic_cast<T*>(p);
if(pointer != nullptr)
func(pointer);
}
}
如何调用 class 方法 GetItemList,该方法将另一个 class(B、C 或 D)的方法作为输入,其对象存在于 class Pro
我试试打电话
GetItemList<void, B>(&B::Show_B);
我明白了
class B' has no member named 'func'
调用std::function时如何防止创建新对象
列表对象
class A
{
};
class B : public A
{
public:
void Show_B()
{
std::cout << "Class B" << std::endl;
};
};
class C : public A
{
public:
void Show_C()
{
std::cout << "Class C" << std::endl;
};
};
class D : public A
{
public:
void Show_D()
{
std::cout << "Class D" << std::endl;
}
};
typedef std::vector<A*> List;
Class 调用模板
class Pro
{
private:
List* m_list;
public:
Pro(List* list)
{
m_list = list;
// GetItemList<void, B>(&B::Show_B);
// GetItemList<void, C>(&C::Show_C);
// GetItemList<void, D>(&D::Show_D);
}
template <typename V, typename T> void GetItemList(std::function<V(T*)> func)
{
T* pointer = nullptr;
for(auto& p : *m_list) {
pointer = dynamic_cast<T*>(p);
if(pointer != nullptr)
pointer->func();
}
}
};
主要功能
void Main()
{
List list;
list.push_back(new B);
list.push_back(new C);
list.push_back(new D);
Pro pro(&list);
}
应该是
template <typename V, typename T> void GetItemList(std::function<V(T*)> func)
{
T* pointer = nullptr;
for (auto& p : *m_list) {
pointer = dynamic_cast<T*>(p);
if(pointer != nullptr)
func(pointer);
}
}