我是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个函数,而其中只有一个采用模板化的参数,那似乎是一种非常复杂的方法。因此,我认为可能会有更好的选择。
您不需要制作整个类的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] 删除。
我来说两句