gpt4 book ai didi

c++ - 将类的非静态函数指针作为参数传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:18 29 4
gpt4 key购买 nike

我需要这样的函数:

class Class_A
{
...
bool ShowVariableConstituents( CString ( * ValueOutput )( double ) );
...
}

bool Class_A::ShowVariableConstituents( CString ( * ValueOutput )( double ) )
{
double dUncalculatedValue;
....

if( ValueOutput )
{
CString strValue = ValueOutput( dUncalculatedValue );
}
....
}

这是我需要如何使用它的示例:

class Class_B : Class_A
{
...
int Calculate();
CString ValueOutput( double dValue );
...
}

CString Class_B::ValueOutput( double dValue )
{
CString strValue;
strValue.Format("%6.2f", ( dValue / m_dAmount * 100 ) );
return strValue;
}

int Class_B::Calculate()
{
...
ShowVariableConstituents( & Class_B::ValueOutput );
...
}

我得到错误:

Error 1 error C2664: ' Class_A::ShowVariableConstituents': conversion of Parameter 1 from 'CString (__thiscall Class_B::* )(double)' in 'CString (__cdecl *)(double)' not possible

你能帮我做对吗?

问候 Camel 领主

最佳答案

为了能够将指针传递给成员函数,您应该按如下方式修改您的函数:

bool ShowVariableConstituents( CString ( Class_A::* ValueOutput )( double ) )

但这无济于事,因为您想将指针传递给 Class_B::ValueOutputClass_AClass_B 一无所知.

您的选择是制作您的函数模板:

template<typename UnaryOperator>
bool Class_A::ShowVariableConstituents( UnaryOperator op )
{
double dUncalculatedValue;
CString strValue = op( dUncalculatedValue );
return true; // false ?
}

然后你可以按如下方式使用它:

int Class_B::Calculate()
{
ShowVariableConstituents( std::bind1st( std::mem_fun( &Class_B::ValueOutput ), this ) );
return 0; // put your code here
}

关于c++ - 将类的非静态函数指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334464/

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