不同类型的 C++ 模板错误

标签 c++ templates memory-management casting rule-of-three

我需要找出以下所有可能的错误,至少三个。

template<typename A, typename B, typename C>
C myfunction(const A& a, const B& b)
{ 
   if ( a < b )  return (C) a;
   else return (C) b;
}

我的回答是

  1. typename A 和 B 可以有不同的类型,这会导致错误,更糟糕的是运算符 < 未在函数中定义。

  2. typename C 可以不同于 A 和 B,然后它对定义为 const 的 a、b 对象进行更改

  3. typename A 可以是整数类型,但我们不对整数类型使用常量引用,我们只将它用于对象。

我的第三个答案是错误的....

谁能解释为什么我的答案是错误的,以及这个模板可能出现的所有错误?我得到了前两个答案的功劳,但我不太喜欢它们。有人对此有更好的解决方案吗?

谢谢,

最佳答案

从 A 到 C 或 B 到 C 的转换需要是多态的或兼容的类型。您可以将 const 与整数引用一起使用。

关于不同类型的 C++ 模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227101/

相关文章:

c++ - 编写程序删除数组中的重复项

javascript - v8 回调不适用于堆上的 JavaScript 对象

templates - 通过时间范围到按年份 pretty-print

c++ - 仅更改 C++ 模板中类型的一部分

memory-management - 为什么我们不在用户空间使用屏障

c++ - "Feature X requires run-time support"是什么意思?

c++ - 解释 Valgrind 输出 C++

c++ - 传递模板函数以在没有 lambda 的情况下进行转换

ios - 赋值是垃圾或未定义

c - 为什么我要 free() 一个由 malloc() 分配的对象?