如何选择特定的函数重载?

时间:2014-08-03 16:37:50

标签: c++ stl overloading operator-keyword

我想将一个重载的运算符传递给一个函数,该函数无法确定它应该使用哪两个重载。

// This works, not overloaded:
chai.add(chaiscript::fun(&HttpRequest::operator+), "+");
// This does not, overloaded:
chai.add(chaiscript::fun(&(
    std::map<std::string,std::string>::operator[]), "[]");

chaiscript :: fun需要一个泛型参数,但它无法确定要使用哪个重载 我需要指定重载,但我不知道语法。 我尝试过这样的事情:

chai.add(chaiscript::fun(&(
    std::map<std::string,std::string>::operator[]<foo>), "[]");

但这不起作用。

如何指定重载的语法?

2 个答案:

答案 0 :(得分:1)

以下内容可帮助您选择map::operator[]

的一次重载
static_cast<
    std::string& (std::map<std::string, std::string>::*)(const std::string&)>(
        &std::map<std::string, std::string>::operator []);

或使用typedef

using MyMap = std::map<std::string, std::string>;

static_cast<std::string& (MyMap::*)(const std::string&)>(&MyMap::operator []);
//          ReturnType    Class     params

答案 1 :(得分:0)

首先,运算符只是具有特殊语法的函数。因此,重载运算符只是重载函数。考虑到这一点,你的问题归结为&#34;如何选择一组重载的功能?&#34;。对此的简单回答是使用static_cast。

或者,我认为您也可以在上下文已经指定要选择哪个重载的上下文中使用它。在你的情况下,你正在使用一个模板函数(我认为)它并没有在那里工作,因为它需要类型来实例化模板,它需要模板instatiation来选择类型,从而选择重载。使用临时变量是解决此问题的一种方法,另一种方法是显式指定模板函数(例如max<float>(0, x),否则0被认为是整数类型)。