【发布时间】:2011-12-19 03:00:59
【问题描述】:
我有一个类,我们称它为 class myClass
class myClass{
// some math operations
myClass get_difference(myClass &b)
{
print_operation(*this, b);
do_something else
return...
}
myClass get_sum(myClass &b)
// pseudocode
void print_operation(const myClass *a, const myClass &b)
{
if function == get_sum
print a << "plus" << b;
if function == get_difference
print a << "minus" << b;
}
// overload cout as well
};
假设我调用了以下代码
myClass anObject(1,2);
myClass anotherObject(3,4);
anObject.get_sum(anotherObject);
anObject.get_difference(anotherObject);
get_sum / get_difference 将调用 print_operation,但我希望能够确定调用者以便使用不同的输出格式。
简单的方法:使用 switch-case 添加一个名为“id”的新参数。给每个函数(调用者)一个 id,并在 print_operation 中使用 switch-case 语句。
但是,还有其他选择吗?更优雅的解决方案?
谢谢。
【问题讨论】:
-
更优雅 - 不。替代方案 - 模板。 Hack - 使用堆栈跟踪(取决于平台)。
-
这不是一种天真的方法,而是 正确 方法:传入某种
print_operation可以用来做正确事情的参数。函数不应该知道,也不应该关心谁/什么调用了它们,只知道它们被调用并被赋予了这些参数。 -
哈哈。谢谢。我不会知道的。总有人能想出更聪明的方法。但是,下面的建议非常有用。我接到你了。 :) 重要的是:“函数不应该知道,也不应该关心谁/什么调用了它们。”