【发布时间】:2012-11-27 02:22:58
【问题描述】:
我想知道如何模板化函数的返回类型,而不是通过以下方式解释返回:
std::string* out_opt
它可以改为为给定函数返回适当的类型。
另外,在@Xeo 的示例代码之后,我想知道绑定具有多个参数的成员函数的最佳方法是...
func_dict["someFunc"] = stream_function<int(int,int)>( std::bind( &MyClass::functionName, instanceOfMyClass, std::_1, std::_2 ) );
这是一个好方法吗?有什么办法可以避免需要明确声明 _1、_2 等?
【问题讨论】:
-
您是否希望所有函数都具有相同的返回类型(只是不通过
string*返回?这应该相对容易。如果您不希望这样,则需要调用者静态知道函数的返回类型,从而使整个调度机制变得毫无意义(不是很有用,如果你需要事先知道你在调用什么)并且更难实现,因为函数对象会有不同的类型。 -
不,我不希望它们都返回相同的类型。我正在寻找概括代码,以便函数对象可以具有不同的类型。为什么这种机制没有用?
-
你可以返回一个 boost::any 而不是通过字符串 outparam 的东西,以避免在调用函数时转换为值的字符串表示形式,但它不会是太多改进,因为调用者需要提前知道类型才能转换 boost::any。
-
@pt3dNyc:如果您想从函数中获取返回值,您需要知道期望的类型。这意味着您需要事先知道要调用哪个函数(如果它们具有不同的返回类型)。如果您知道要调用的函数,那么您需要整个调度机制来做什么。作为旁注:如果您对之前的评论做出反应,您可能希望以
@Username开始您的评论,因为这会通知被寻址的用户,从而加快反应时间。 -
@Grizzly,我明白你的意思。我正在查看:loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/…,它确实实现了返回类型,但由于您指出的原因,它可能不是很有用。