headerfile.h
class A
{
cv::Mat depthimagemouse;
std::string m_winname;
public:
A(const std::string &winname, const cv::Mat depth_clean);
static void onMouse( int evt, int x, int y, int flags, void* param );
};
cppfile.cpp
A::A(const std::string &winname, const cv::Mat depth_clean)
: m_winname(winname), depthimagemouse(depth_clean)
{
//something..
}
void A::onMouse( int event, int x, int y, int flags, void* param )
{
//Here I want to use depthimagemouse member variable (and other members..)
}
我的问题是如何在onMouse方法中使用depthimagemouse变量?
答案 0 :(得分:3)
如果图书馆在其文档中没有解释这一点,我会感到惊讶,但无论如何。当您使用不支持成员函数的回调时,这是标准过程,但您仍需要一种方法来访问成员数据。因此,您执行以下操作:
param
(或其成员)传递。所以,你可以这样做:
auto &that = *static_cast<A *>(param); // <= C++03: use A &that
// Cast to const A if you want, or use a pointer, or etc.
std::cout << that.depthimagemouse << std::endl;
或者它通常在语法上更好地立即发送到成员函数并让它做所有事情:
static_cast<A *>(param)->doRestOfStuff(evt, x, y, flags);
// Include a const in the cast if the method is const
或介于两者之间的任何地方。
答案 1 :(得分:0)
depthimagemouse
是一个实例成员,意味着每个A
实例(如果您愿意,对象)都有自己的depthimagemouse
。您的onMouse
方法是静态方法,意味着它与任何特定的给定实例无关,而与所有实例无关,因此考虑访问{{1}是无意义的无需指定您感兴趣的实例。
如果没有关于depthimagemouse
和您的模型的更多信息,很难告诉您该怎么做。可以使用onMouse
来指定静态方法将接收的param
实例吗?在这种情况下,可以使用强制转换将实例返回到方法中:A
然后您可以使用它A *anInstance = static_cast<A *>(param);
(请参阅我们正在讨论的anInstance->depthimagemouse
给出实例?)等等。