Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
现代C++设计中的样本代码 我读过现代C++设计 我在它的示例代码中有一个问题_C++_Loki - Fatal编程技术网

现代C++设计中的样本代码 我读过现代C++设计 我在它的示例代码中有一个问题

现代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

在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错误

我说的对吗


谢谢

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);