现代C++设计中的样本代码 我读过现代C++设计 我在它的示例代码中有一个问题
在p278 p279中 如果你没有这本书,也可以参考洛基的资料 BasicDipatcher::Add和BasicDispatcher::采用多种方法。h 在第p278页底部至第p279页上方 它有一段示例代码 typedef基本调度员调度员; void HatchRectanglePolyShape&lhs,Shape&rhs{…} 调度员调度; disp.AddHatchRectanglePoly; 我在函数Go中发现,它的参数是BaseLhs&,BaseRhs& 在这种情况下,应该是Shape&,Shape& 在函数Add中,它的参数是SomeLhs&,SomeLhs&, 在这种情况下,应该是矩形和多边形& 因此,密钥无论如何都不会匹配,因为它们是不同的 因此,不会调用callbackHatchRectanglePoly 如果我添加disp.Go。。。。在samele代码中, 相反, 将抛出std:runtime\u错误 我说的对吗现代C++设计中的样本代码 我读过现代C++设计 我在它的示例代码中有一个问题,c++,loki,C++,Loki,在p278 p279中 如果你没有这本书,也可以参考洛基的资料 BasicDipatcher::Add和BasicDispatcher::采用多种方法。h 在第p278页底部至第p279页上方 它有一段示例代码 typedef基本调度员调度员; void HatchRectanglePolyShape&lhs,Shape&rhs{…} 调度员调度; disp.AddHatchRectanglePoly; 我在函数Go中发现,它的参数是BaseLhs&,BaseRhs& 在这种情况下,应该是Sha
谢谢BaseLhs和BaseRhs是模板参数。与函数参数一样,实际值将在您使用它实例化模板时提供,而不是在您定义它时提供
template
<
class BaseLhs,
class BaseRhs = BaseLhs,
typename ResultType = void,
typename CallbackType = ResultType (*)(BaseLhs&, BaseRhs&)
>
class BasicDispatcher
Add也是如此
简言之:模板中写入的类型名称只是一个占位符,使用时将被实际类型替换
希望这对你有所帮助
注:关于尖括号内的类和类型名,它们具有相同的含义,我想这只是对读者的一个警告,BaseLhs和BaseRhs将始终是类。希望您可以在此处粘贴更多代码,例如可以在中找到Add和Gosource的声明
typedef BasicDispatcher<Shape> Dispatcher;
Dispatcher disp;
void Go(Shape& lhs, Shape& rhs);