编译器错误:无法绑定带有两个参数的重载函数

Compiler error: failed to bind overloaded function with two arguments

本文关键字:两个 参数 函数 重载 错误 绑定 编译器      更新时间:2023-10-16

我找不到编译以下代码的方法。我正在寻找一种方法来绑定第一个重载的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;
}

您缺少一个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);

您可以使用lambda:

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