传递一个重载函数为模板

我有这样的模板集

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

--------------解决方案-------------

定义类型定义为:

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

我觉得需要一个明确的转换:
.set( "child_value", static_cast<const char_t* (xml_node::*)() const>( &pugi::xml_node::child_value ) );

好吧,我做到了我自己。

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

然后,只是调用

.set("child_value", ChildValuePointer)

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#中,模板,重载
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.117 (s). 10 q(s)