2011-04-16 54 views
3

我有這個模板中設置傳遞一個重載函數爲模板

 __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()版本。

回答

2

定義的類型定義爲:

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 
0

行, 我自己做了。

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

然後,只需調用

.set("child_value", ChildValuePointer) 
2

我認爲需要顯式轉換:
.set("child_value", static_cast<const char_t* (xml_node::*)() const>(&pugi::xml_node::child_value));