繁体   English   中英

将重载函数作为模板传递

[英]Pass a overloaded function as a template

我有这个模板集

        __Self &set(const char *name, lua_CFunction func)
        { return rawSet(name, FuncCall::create(func)); }
....

我用的是:

.set("child_value", &pugi::xml_node::child_value)

但是child_value超载了

const char_t* xml_node::child_value(const char_t* name) const
const char_t* xml_node::child_value() const

并且编译器给出了这个错误:

error C2668: 'SLB::Class<T,W>::set' : ambiguous call to overloaded function

我怎么能修复这个错误? 我想要child_value()版本。

我认为需要明确的演员:
.set( "child_value", static_cast<const char_t* (xml_node::*)() const>( &pugi::xml_node::child_value ) );

将typedef定义为:

typedef const char_t* (pugi::xml_node::*fn_pchar)(const char_t* name) const;
typedef const char_t* (pugi::xml_node::*fn_void)() const;

然后写:

//if you want to select first member function that takes parameter (char*)
set("child_value", (fn_pchar)&pugi::xml_node::child_value); 
                  //^^^^^^^^ note this!

//if you want to select second member function that takes no parameter (void)
set("child_value", (fn_void)&pugi::xml_node::child_value); 
                  //^^^^^^^ note this

好的,我自己做了。

typedef const char* (pugi::xml_node::*ChildValueFunctionType)(void) const; // const required!
ChildValueFunctionType ChildValuePointer = &pugi::xml_node::child_value;

然后,只是打电话

.set("child_value", ChildValuePointer)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM