非静态成员函数模板地址
address of non static member function template
我正在尝试了解是否可以获取非静态成员函数模板的地址。下面不起作用,使用 &sz<int>
会导致其他错误。获取非静态成员函数模板地址的正确方法是什么?
311 struct XYZ
312 {
313 template <typename Z>
314 void sz()
315 {
316 }
317
318 void func()
319 {
320 auto z = sz<int>;
321 }
322 };
导致错误
vs.cc:320:16: error: reference to non-static member function must be called; did you mean to call it with no arguments?
auto z = sz<int>;
void sz()
是一个模板并不重要,因为sz<int>
是一个成员函数。 C++ 中没有“地址”的概念——这是一个实现细节。你可以拥有的是一个指向成员函数的指针,它的语法是:
auto z = &XYZ::sz<int>;
要在 func()
中调用它,您需要以下语法:
(this->*z)();
我正在尝试了解是否可以获取非静态成员函数模板的地址。下面不起作用,使用 &sz<int>
会导致其他错误。获取非静态成员函数模板地址的正确方法是什么?
311 struct XYZ
312 {
313 template <typename Z>
314 void sz()
315 {
316 }
317
318 void func()
319 {
320 auto z = sz<int>;
321 }
322 };
导致错误
vs.cc:320:16: error: reference to non-static member function must be called; did you mean to call it with no arguments?
auto z = sz<int>;
void sz()
是一个模板并不重要,因为sz<int>
是一个成员函数。 C++ 中没有“地址”的概念——这是一个实现细节。你可以拥有的是一个指向成员函数的指针,它的语法是:
auto z = &XYZ::sz<int>;
要在 func()
中调用它,您需要以下语法:
(this->*z)();