【发布时间】:2013-02-12 19:24:10
【问题描述】:
我需要找到一些方法来模拟 C++ 中函数返回类型的重载。
我知道没有办法直接做到这一点,但我希望有一些开箱即用的方法。 我们正在创建一个供用户使用的 API,他们将传入一个数据字符串,该字符串根据字符串信息检索值。这些值是不同的类型。本质上,我们想让他们这样做:
int = RetrieveValue(dataString1);
double = RetrieveValue(dataString2);
// Obviously, since they don't know the type, they wouldn't use int =.... It would be:
AnotherFunction(RetrieveValue(dataString1)); // param of type int
AnotherFunction(RetrieveValue(dataString2)); // param of type double
但这在 C++ 中不起作用(显然)。 现在,我们正在设置它以便他们调用:
int = RetrieveValueInt(dataString1);
double = RetrieveValueDouble(dataString2);
但是,我们不希望他们知道他们的数据字符串的类型是什么。
很遗憾,我们不允许使用外部库,所以不要使用 Boost。
有什么办法可以解决这个问题吗?
澄清一下,我知道 C++ 本身无法做到这一点。但必须有某种方法可以绕过它。比如我想过做RetrieveValue(dataString1, GetType(dataString1))。这并不能真正解决任何问题,因为 GetType 也只能有一种返回类型。但我需要这样的东西。
我知道以前有人问过这个问题,但意义不同。我不能使用任何明显的答案。我需要一些完全开箱即用的东西才能对我有用,而其他问题中的任何答案都不是这种情况。
【问题讨论】:
-
他们如何知道将函数的结果分配给什么类型?
-
您正试图走一条错误的道路。不同的类型是不同的类型,不同的功能是不同的功能。这种语法重载不会增加任何价值。相反,它会给你的代码增加不必要的复杂性。不要这样做。
-
您会展示您希望调用此函数的实际方式吗?而 int x = RetrieveValue(...) 是不是因为他们必须为 x 指定 int ,这会破坏您的条件之一。我认为这个问题构思不当。
-
是的,我使用 int = RetrieveValue(...) 作为一个简单的例子。他们实际上将在另一个函数内部调用该函数。所以它可能是:AnotherFunction(RetrieveValue(...),param);
标签: c++ function types overloading