我想知道是否有一种方法可以通过一个函数来完成以下操作:
template <typename T>
void _class_<T>::func (T chgx = x, T chg y = y, T chgz = z)
{
x = chgx;
y = chgy;
z = chgz;
}
我想做的是将默认值设置为要更改的值,这样,如果我省略一些参数,这些值就不会更改。上面的代码不起作用,我想我理解为什么(该函数实际上无法访问这些值,因此会引发错误)。
我想知道的是,是否有一种方法可以像上面描述的那样使用一种功能来完成所有这些工作。我唯一的选择是用多个定义重载函数以处理不同数量的参数吗?
您可以通过具有一组重载函数来完成所需的操作。
// First overload. Needs all arguments.
template <typename T>
void _class_<T>::func (T chgx, T chgy, T chgz)
{
x = chgx;
y = chgy;
z = chgz;
}
// Second overload. Needs two arguments.
template <typename T>
void _class_<T>::func (T chgx, T chgy)
{
x = chgx;
y = chgy;
}
// Third overload. Needs one argument.
template <typename T>
void _class_<T>::func (T chgx)
{
x = chgx;
}
// You can have a fourth overload that takes no arguments.
// However, it's totally useless.
template <typename T>
void _class_<T>::func ()
{
// Nothing needs to be changed.
}
重复代码较少的东西(感谢@BenVoigt的建议):
// Second overload. Needs two arguments.
template <typename T>
void _class_<T>::func (T chgx, T chgy)
{
func(chgx, chgy, z);
}
// Third overload. Needs one argument.
template <typename T>
void _class_<T>::func (T chgx)
{
func(chgx, y);
}
// You can have a fourth overload that takes no arguments.
// However, it's totally useless.
template <typename T>
void _class_<T>::func ()
{
func(x);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句