能不能回式混?或者变通的解决方案
can return type mix? or workaround solution
我有一个分数类,在自己的院子里工作得很好,像1/2+1/3=5/6,甚至与int,1/2+2=5/2。
对于我来说,看到3/2+3/2=3/1是可以的,但是,是否有一种方法可以返回类型条件?例如,如果分母为1,则返回int,否则返回Fraction。
如果不可能,还有其他绕路吗?
class Fraction{
__int64 _num,_dem;
public:
friend Fraction const operator+(Fraction const& lhs,Fraction const& rhs);
}
Fraction const operator+(Fraction const& lhs,Fraction const& rhs){
return Fraction(lhs)+=rhs;
}
非常感谢您的建议!
不能有条件地更改返回类型。(如果你有一个超类,你可以有多态性,但这不是你在这里要求的,因为int
是一个内在类型。)考虑这种情况:
Fraction A, B;
// initialize to 3/2 and 3/2
sometype C = A + B;
C的类型是什么?编译器必须知道。即使在多态性或类型推断的情况下,在编译时必须有一个确定的解决方案关于C的类型是什么。
并且直到运行时才知道Fraction
是否表示整数
不,在c++中不可能以您希望的方式让返回类型依赖于操作数的值。既然从那里输出的下一层代码需要静态地知道结果类型是什么,那么这有什么意义呢?
现在,如果您的值在编译时都是已知的,那么您可以执行一些模板魔术来使事情在编译期间发生,但这似乎不是您想要完成的。
一个可能的(运行时)解决方案是使用隐式的int转换运算符来断言您的分数是x/1。
class Fraction
{
operator __int64() const
{
assert(den == 1);
return num;
}
}
它允许你将Fraction传递给整数,并在运行时检查它是否正确。这可能不是你真正想要的,但这是你能得到的最好的。
一个可能的解决方案是合并std::pair和boost::optional。
std::pair< boost::optional<Fraction>, boost::optional<int> > const operator+(Fraction const& lhs,Fraction const& rhs);
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 能不能回式混?或者变通的解决方案