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