【问题标题】:Prototyping a template function in C++在 C++ 中对模板函数进行原型设计
【发布时间】:2015-06-04 08:43:10
【问题描述】:

我正在学习 C++ 模板,作业中的一个问题问我以下问题:

//Use the template below to answer the questions and create C++ functions:
template<class  T>  void  enemyAdjust(T  objparm)
{
  objparm.moveposition();
  objparm.fireweapon();
} 
//Write one line of code to prototype a template function using type: RapidDog 

这甚至意味着什么?我试过输入void enemyAdjust(RapidDog) 及其变体以及其他变体,但似乎没有一个是正确的。它在求什么?我了解模板函数的基础知识,并且可以编写一个,但我只是不明白问题或我应该做什么。

注意:这是一个在线作业;它会告诉您是对还是错,然后要求您再试一次以继续。

【问题讨论】:

  • 我不熟悉“原型”这个词,也许它的意思是声明(不是定义):coliru.stacked-crooked.com/a/74391f228a7719cc
  • “似乎没有一个是正确的”是什么意思?我们如何猜测自动验证者想看到什么?这个模板函数定义没有错。
  • 可能会要求您使用 RapidDog 类型的参数调用enemyAdjust 函数。例如。喜欢:enemyAdjust(RapidDog()); 或直接使用enemyAdjust&lt;RapidDog&gt;(RapidDog());
  • 或者他只是使用了错误的术语来表示“显式实例化”coliru.stacked-crooked.com/a/9c4e6e5749535290
  • @MarcoA.: 不,你在想 C。C++ 中没有“原型”的概念,这个术语只存在于“原型范围”这个名称中。

标签: c++


【解决方案1】:

通常原型是函数的签名(它的声明)。但是,在这里,您可能会被要求显式实例化它。您可以通过键入:

template void enemyAdjust<RapidDog>(RapidDog objparm); // explicit instantiation

【讨论】:

  • 这不会编译。您缺少空括号template&lt;&gt;
  • 不,template&lt;&gt; 声明模板特化,template 是显式实例化。见this question
  • 不管怎样,都说错了。显然不是,但是……据此。
【解决方案2】:

问题是:编写一行代码,使用 type: RapidDog 对模板函数进行原型设计。在这种情况下,“T”只是教授必须引用的未知类型 T。所以这里的类型是 RapidDog,导致:

void enemyAdjust(RapidDog  objparm);

另一个模板示例如下:

template<class  T>   T  func1(T  a, T  b) 

并且只使用你想要的类型。这只是简单的替换。

int func1(int a, int b);
double func1(double a, double b);

【讨论】:

    【解决方案3】:

    它可能要求您创建一个名为 RapidDog 的类。 这个类需要适合在enemyAdjust函数的模板实例化中被替换。

    struct RapidDog
    {
      void moveposition() {};
      void fireweapon {};
    };
    

    应该可以解决问题。

    【讨论】:

    • 不。它只提供一行来输入代码。通常这些东西就像 voidenemyAdjust();或者其他的东西。我只是不知道这个人要什么。
    【解决方案4】:

    对象 RapidDog 应该提供enemyAdjust() 模板函数使用的方法。您是否检查过 RapidDog 类中是否存在 moveposition() 和 fireweapon() ?如果它们不存在,您应该实现它们。

    【讨论】:

    • 没有进一步定义的类。我所拥有的信息就是我在代码块中发布的信息。这就是作业材料中提出的问题及其给出的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2013-04-14
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多