类模板方法的特化,类型名是类模板 - 错误:参数的类型/值不匹配

人造人

我的问题是,当它是另一个模板的参数时,我是否必须指定模板的“类型”?这是一种方法的专业化。

让我允许把你放在上下文中。

我正在做一个井字游戏,其中有一个模板计算机类。所以,我可以在参数中设置它的难度级别。这是它的一个示例:

template<int T>
class Computer
{
    Node *Root;         /**< Root of a decision tree */
    Node *Current;      /**< Current node in a decision tree*/

    int PlayerNumber;   /**< Player ID*/
    int OponnentNumber  /**< Opponent ID*/

  Public:

    /**< Constructor destructor */
    int refreshBoard(int move);
    int play()const; /**< This methods has different implementations, for each level of difficulty*/
}

然后,我想出了一个想法,创建一个 TicTacToe 类,以便参数接收不同类型的玩家。这是一个样本。

template <typename T1, typename T2>
class TicTacToe
{
    T1 &Player1;        /**< Simulates the first player */
    T2 &Player2;        /**< Simulates the second player */

     Board &b__;        /**< Simulates a board */

     int TurnCounter; 
 public:
    int newTurn(); 
 /* This method is implemented differently for each type of combination of player
  * Lets say player 1 is Human and player 2 is computer. The new turn will 
  * change the state of the board and will return 1 if there is still new turns 
  * to come.
  */
}

回到我的问题:我在设置正确的语法时遇到问题,所以编译器理解我。

它返回很多错误:

error: type/value mismatch at argument 2 in template parameter list for ‘template<class T1, class T2> class TicTacToe’
 int JogoVelha<Human,Computer>::newTurn()`


note: expected a type, got ‘Computer’
header/TicTacToe.h:201:40: error: ‘newTurn’ is not a template function
 int TicTacToe<Human,Computer>::newTurn()

对于此类组织

template<>
int TicTacToe<Human,Computer>::newTurn() 
...implementation

我不明白为什么。我需要你的帮助。

songyuanyao

Computer 是类模板,使用时必须指定模板参数,例如

template<>
int TicTacToe<Human,  Computer<42>>::newTurn()

或者您可以部分指定 TicTacToe类模板,例如Computer它采用int模板参数。。例如

template <typename T1, template <int> class T2, int I>
class TicTacToe<T1, T2<I>>

{
    T1 &Player1;        
    T2<I> &Player2;
    ...
};

然后像这样使用它

TicTacToe<int, Computer<42>> t;

居住

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++模板-参数的类型/值不匹配

来自分类Dev

C ++模板-参数的类型/值不匹配

来自分类Dev

类型/值与模板的参数不匹配

来自分类Dev

类错误中的 C++ 模板特化

来自分类Dev

向两个模板类添加模板类型名

来自分类Dev

类模板重载,类型名和类型名向量

来自分类Dev

如何检查模板类方法的返回类型?

来自分类Dev

Haskell多参数类(模板类型类)

来自分类Dev

基于模板类型的类类型

来自分类Dev

使用参数包作为模板类的类型名

来自分类Dev

使用模板的参数时类型/值不匹配

来自分类Dev

如何确定从类模板继承的模板参数的基础模板类型?

来自分类Dev

错误:参数值与预期类型不匹配

来自分类Dev

错误:参数值与预期类型不匹配

来自分类Dev

包含常量类型模板的类的模板?

来自分类Dev

使模板类的用户独立于模板类型

来自分类Dev

任何指针类型的模板特化

来自分类Dev

从模板类获取“子类型”

来自分类Dev

模板中模板类型相关结构的特化

来自分类Dev

“模板模板参数的模板参数必须是类模板或类型别名模板”

来自分类Dev

“模板模板参数的模板参数必须是类模板或类型别名模板”

来自分类Dev

使用类型名使用模板转发类声明

来自分类Dev

C ++模板的类和类型名之间的区别

来自分类Dev

使用类型名使用模板转发类声明

来自分类Dev

C ++模板的类和类型名之间的区别

来自分类Dev

在类模板中定义本地类的类型

来自分类Dev

嵌套类型作为基类的模板参数

来自分类Dev

如何使用类的类型作为模板的参数

来自分类Dev

没有类型参数的模板父类