我正在尝试使用成员函数复制我之前使用过的模板,并且它不是很顺利.该功能的基本形式是
template<class T>
T Convert( HRESULT (*Foo)(T*))
{
T temp;
Foo(&temp); //Throw if HRESULT is a failure
return temp;
}
HRESULT Converter(UINT* val)
{
*val = 1;
return S_OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << Convert<UINT>(Converter) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于我的生活,我无法使用成员变量.我已经阅读了他们的语法,我似乎无法弄清楚如何使它与模板一起工作.
这个课程类似于
class TestClass
{
HRESULT Converter(UINT* val)
{
*val = 1;
return S_OK;
}
}
Run Code Online (Sandbox Code Playgroud)
TestClass是无国籍的.那么为什么要传递非静态成员函数呢?如果在实际代码中您需要访问非静态成员,则还需要传递该对象
template<class T, class C>
T Convert( HRESULT (C::*Foo)(T*), C c)
{
T temp;
(c.*Foo)(&temp); //Throw if HRESULT is a failure
return temp;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像下面这样调用它,假设成员函数是公共的
TestClass c;
Convert(&TestClass::Converter, c);
Run Code Online (Sandbox Code Playgroud)
如果类是重量级的,或者如果函数在执行期间更改其对象,则可以决定Convert通过引用传递对象.