如何使用不同的模板作为输入来定义函数
How to define function with different templates as input
我对C++(和堆栈溢出(完全陌生,所以请耐心等待。我正在尝试创建两个模板和一个从两个模板获取输入的函数。
我尝试制作一些类似于我的代码的示例代码,并重现错误。基本上我有两个模板狗和猫,并且想创建一个分别采用狗和猫实例的运算符函数,但我真的很纠结如何编写函数头。在花了很多时间阅读Stack Overflow帖子之后,我加入了关键字"模板"和"类型名称",试图使其工作,但我不断收到错误。当前错误是
忽略候选模板:无法推断模板参数"T">
template <class T> class Dog
{
private:
int size;
public:
Dog(int size1)
{
size = size1;
}
};
template <class T> class Cat
{
private:
int size;
public:
Cat(int size1)
{
size = size1;
}
};
template <class T> // What to write here?
typename Cat<T>::template Cat<T> operator*(typename Dog<T>::template Dog<T> m,typename Cat<T>::template Cat<T> v)
{
Cat<int> return_cat(1);
return return_cat;
}
int main(int argc, char* argv[])
{
Cat<double>::Cat<double> new_cat(2);
Dog<double>::Dog<double> new_dog(4);
Cat<double>::Cat<double> result = new_dog*new_cat; // ERROR couldn't infer template argument 'T'
return 0;
}
我的问题是:我应该如何定义operator*
函数的函数头以避免任何错误?
我不确定您要对所有范围运算符做什么。你不需要它们。只需使用正确的类型即可。我添加了 const 引用,因为它在这种情况下看起来很合理。它们不是严格要求的。
template <class T>
Cat<T> operator*(const Dog<T>& m, const Cat<T>& v)
{
Cat<T> return_cat(1);
return return_cat;
}
int main(int argc, char* argv[])
{
Cat<double> new_cat(2);
Dog<double> new_dog(4);
Cat<double> result = new_dog * new_cat;
return 0;
}
我不确定您对operator*()
的预期用途是什么,但通常它看起来像这样:
template <class T>
Cat<T> operator*(Dog<T> m, Cat<T> v)
这允许猫和狗在模板类相同的情况下相乘。
如果它们不一样(也就是说,猫和狗的类型不同(,你会想要这样的东西:
template <class T1, class T2>
Cat<T2> operator*(Dog<T1> m, Cat<T2> v)
这允许猫和狗具有不同的类型并相乘。
为了简化它以便于"阅读"而不是将狗与猫"混合":),您可以玩这个重载
template <class T>
class Animal
{
private:
T size;
public:
Animal(T size1) {
size = size1;
}
T getSize() {
return size;
}
Animal<T> operator*(Animal<T> animal1)
{
T a = animal1.getSize();
T b = this->getSize();
Animal<T> animal = Animal<T>(a*b);
return animal;
}
};
intmain(int argc, char* argv[]( {
Animal<double> cat(2);
Animal<double> dog(4);
Animal<double> result( dog*cat );
return 0;
}
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 用户定义函数中的指针和输入
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 如何使用运算符>>在自定义字符串中输入多个单词?
- 跳转到通过输入坐标定义的控制台屏幕位置
- CLion 是否支持自定义输入?如果是,我在哪里输入它们?
- 编译一个自定义的tf操作,其中输入是5d张量
- 如何定义此"if block"中其他无效输入的值,以便在c ++中将字符串转换为对象?
- 数组大小由输入文件中的行数定义
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- 尝试检查输入的文本与我自己的自定义答案
- LLDB:实现接受用户输入的自定义命令
- 自定义 LowLevelMouseProc 回调函数不阻止输入
- 如何在 C++ 中将火炬模型定义为函数的输入
- 字符串流中的自定义字符串输入
- 如何从输入中定义的"external" int 定义结构中的数组大小
- 访问自定义OP的输入值时的segmenation故障
- 使用用户输入定义数组
- 根据用户的输入C++定义的数组大小
- 使用C++数组输入定义重载函数是安全的