我有以下两种方法(如你所见)在大多数语句中都是类似的,除了一种(详见下文)
unsigned int CSWX::getLineParameters(const SURFACE & surface, vector<double> & params)
{
VARIANT varParams;
surface->getPlaneParams(varParams); // this is the line of code that is different
SafeDoubleArray sdParams(varParams);
for( int i = 0 ; i < sdParams.getSize() ; ++i )
{
params.push_back(sdParams[i]);
}
if( params.size() > 0 ) return 0;
return 1;
}
unsigned int CSWX::getPlaneParameters(const CURVE & curve, vector<double> & params)
{
VARIANT varParams;
curve->get_LineParams(varParams); // this is the line of code that is different
SafeDoubleArray sdParams(varParams);
for( int i = 0 ; i < sdParams.getSize() ; ++i )
{
params.push_back(sdParams[i]);
}
if( params.size() > 0 ) return 0;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
是否有任何技术可以用来将两种方法的公共代码行移到一个单独的方法中,可以从两个变量中调用 - 或者 - 可能将两种方法组合到一个方法中?
以下是限制:
我知道以下可能(可能?)实现为解决方案,但我真的希望有更好的解决方案:
以下不是限制,但由于我的队友阻力,这将是一个要求:
GMa*_*ckG 11
想到几个想法,但这是我认为最好的:
namespace detail
{
void getParameters(const SURFACE& surface, VARIANT& varParams)
{
surface->getPlaneParams(varParams);
}
void getParameters(const CURVE& curve, VARIANT& varParams)
{
curve->get_LineParams(varParams);
}
}
template <typename T>
unsigned int getParameters(const T& curve, vector<double> & params)
{
VARIANT varParams;
detail::getParameters(curve, varParams);
SafeDoubleArray sdParams(varParams);
for( int i = 0 ; i < sdParams.getSize() ; ++i )
{
params.push_back(sdParams[i]);
}
return params.size() != 0;
}
Run Code Online (Sandbox Code Playgroud)
您所做的是将获取参数的任务委托给其他一些过载的函数.只需为您拥有的每种不同类型添加类似的功能.(注意,我简化了你的退货声明.)