编译器错误:无法使用两个参数绑定重载函数

时间:2015-12-28 04:01:39

标签: c++

我无法找到一种方法来编译以下代码。我正在寻找一种方法来绑定第一个重载的sn(),它接受一个枚举,这样我就可以将一个字符串传递给它。我不需要绑定第二个重载。

#include <iostream>

struct Stats
{
    enum AlignMetrics
    {
        AlignExon,
        AlignIntron,
        AlignBase
    };

    // How to bind this function??
    inline double sn(const std::string &cID, enum AlignMetrics m) const
    {
        return 0.0;
    }

    inline double sn(const std::string &cID, const std::string &id) const
    {
        return 0.0;
    }
};


int main(int argc, const char * argv[])
{
    Stats stats;

    // Ok (calling directly)        
    stats.sn("", Stats::AlignMetrics::AlignExon);

    // Can't compile (I want to bind it such that it takes only the first argument)
    std::bind(static_cast<double (Stats::*)(const std::string &, enum Stats::AlignMetrics)>(&Stats::sn), &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

您错过了const

std::bind(static_cast<double (Stats::*)(const std::string &, enum Stats::AlignMetrics) const>(&Stats::sn), &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);
                                                                                     // ^^^ Missing

简化建议:

double (Stats::*fptr)(const std::string &, enum Stats::AlignMetrics) const = &Stats::sn;
std::bind(fptr, &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);

答案 1 :(得分:1)

您可以使用lambda:

auto func = [&](std::string const &s) { return stats.sn(s, Stats::AlignMetrics::AlignExon); };