Передать перегруженную функцию как шаблон - PullRequest
3 голосов
/ 16 апреля 2011

У меня есть этот набор шаблонов

        __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 ().

Ответы [ 3 ]

2 голосов
/ 16 апреля 2011

Я думаю, что требуется явное приведение:
.set( "child_value", static_cast<const char_t* (xml_node::*)() const>( &pugi::xml_node::child_value ) );

2 голосов
/ 16 апреля 2011

Определите typedefs как:

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 голосов
/ 16 апреля 2011

OK, Я сделал это сам.

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

Тогда просто звонит

.set("child_value", ChildValuePointer)
...