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

我是C ++的新手,我知道这是非常基本的知识,但是我无法确定正确的关键字来找到解决此特定问题的方法。

假设我有两个班级:食物和狗。食物是模板类。然后,我想将食物对象作为参数传递给Dog中名为“ eat”的函数。最好的方法是什么?这是我认为最有意义的方法,但是它不起作用。

// main.cpp
#include <iostream>
#include "food.h"
#include "food.cpp"
#include "dog.h"

int main(void)
{
    Food<int> *food = new Food(10);
    Dog *dog = new Dog();
    dog->eat(food);
    
    delete food;
    delete dog;
    
    return 0;
}
// dog.h
#pragma once

class Dog()
{
public:
    Dog();
    ~Dog();
    void eat(Food<T>);
};
// dog.cpp
#include "dog.h"

Dog() {}

~Dog() {}

void eat(Food<T> food)
{
    std::cout << "Eating food\n";
}
// food.h
#pragma once

template <class T>
class Food
{
public:
    Food(T value);
    ~Food();
    
    T value = -1;
};
// food.cpp
#include "food.h"

template <class T>
Food<T>::Food(T value): value(value) {}

template <class T>
Food<T>::~Food() {}

是否也需要将Dog设为模板类,以仅将模板对象传递给单个功能?如果一个类中有20个函数,而其中只有一个采用模板化的参数,那似乎是一种非常复杂的方法。因此,我认为可能会有更好的选择。

贾罗德42

您不需要制作整个类的dog模板,您可以只使用模板方法:

template <class T>
class Food
{
public:
    Food(T value) : value(value) {}

    T value;
};

class Dog
{
public:

    template <typename T>
    void eat(Food<T>) { std::cout << "Eating food\n"; }
};

int main()
{
    Food<int> food(10);
    Dog dog;
    dog.eat(food);
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何使用非类型模板参数和类型模板参数的混合来对函数进行模板化?

来自分类Dev

模板作为参数类型

来自分类Dev

使用类作为带有前向声明的模板化类的模板参数

来自分类Dev

类模板作为模板专业化中的参数

来自分类Dev

如何使用Class对象作为参数化类型?

来自分类Dev

如何使用类的属性作为模板参数/进行专业化?

来自分类Dev

模板类作为模板参数

来自分类Dev

如何使用指针作为模板类型的链接列表节点定义模板类

来自分类Dev

如何在类外的签名中使用模板参数的嵌套类型定义模板类函数

来自分类Dev

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

来自分类Dev

如何使用模板模板参数专门化类模板?

来自分类Dev

如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

来自分类Dev

使用模板类作为模板参数

来自分类Dev

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

来自分类Dev

如何使用模板类型作为函数参数派生抽象模板类(C ++ 11)

来自分类Dev

如何在LiveData <I>类中使用“ I”作为化类型参数?

来自分类Dev

如何使用非类型模板参数和类型模板参数的混合来对函数进行模板化?

来自分类Dev

C ++-使用基类作为模板参数

来自分类Dev

使用模板参数实例化模板类

来自分类Dev

在模板专业化中将类模板作为参数

来自分类Dev

如何将模板化的类自己的类作为默认模板类型传递?

来自分类Dev

使用自身作为参数的模板类。C ++

来自分类Dev

使用is作为模板类型参数时可以访问类字段吗?

来自分类Dev

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

来自分类Dev

传递模板化的智能指针类型作为模板参数

来自分类Dev

如何将模板化类实例作为模板参数传递给另一个模板?

来自分类Dev

如何使用非类型参数传递模板类的 Ref 或 Ptr

来自分类Dev

如何使用当前类模板作为另一个模板的模板参数?

Related 相关文章

  1. 1

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

  2. 2

    如何使用非类型模板参数和类型模板参数的混合来对函数进行模板化?

  3. 3

    模板作为参数类型

  4. 4

    使用类作为带有前向声明的模板化类的模板参数

  5. 5

    类模板作为模板专业化中的参数

  6. 6

    如何使用Class对象作为参数化类型?

  7. 7

    如何使用类的属性作为模板参数/进行专业化?

  8. 8

    模板类作为模板参数

  9. 9

    如何使用指针作为模板类型的链接列表节点定义模板类

  10. 10

    如何在类外的签名中使用模板参数的嵌套类型定义模板类函数

  11. 11

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

  12. 12

    如何使用模板模板参数专门化类模板?

  13. 13

    如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

  14. 14

    使用模板类作为模板参数

  15. 15

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

  16. 16

    如何使用模板类型作为函数参数派生抽象模板类(C ++ 11)

  17. 17

    如何在LiveData <I>类中使用“ I”作为化类型参数?

  18. 18

    如何使用非类型模板参数和类型模板参数的混合来对函数进行模板化?

  19. 19

    C ++-使用基类作为模板参数

  20. 20

    使用模板参数实例化模板类

  21. 21

    在模板专业化中将类模板作为参数

  22. 22

    如何将模板化的类自己的类作为默认模板类型传递?

  23. 23

    使用自身作为参数的模板类。C ++

  24. 24

    使用is作为模板类型参数时可以访问类字段吗?

  25. 25

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

  26. 26

    传递模板化的智能指针类型作为模板参数

  27. 27

    如何将模板化类实例作为模板参数传递给另一个模板?

  28. 28

    如何使用非类型参数传递模板类的 Ref 或 Ptr

  29. 29

    如何使用当前类模板作为另一个模板的模板参数?

热门标签

归档