【发布时间】:2020-02-05 12:44:41
【问题描述】:
我无法编译以下代码。
void print_number(long n) {
std::cout << n << std::endl;
}
void print_number(float n) {
std::cout << n << std::endl;
}
void print_pair(std::pair<std::string, long> p) {
std::cout << std::get<1>(p) << std::endl;
}
void print_pair(std::pair<std::string, float> p) {
std::cout << std::get<1>(p) << std::endl;
}
int main() {
print_number(12l);
print_number(3.4f);
print_pair({"long", 12l});
print_pair({"float", 3.4f});
return 0;
}
print_number 函数运行良好。但是,编译器抱怨 print_pair 函数重载:
error: call of overloaded ‘print_pair(<brace-enclosed initializer list>)’ is ambiguous.
<brace-enclosed initializer list> 或 std::pair 中的内容是否无法正常工作?如何重载接收std::pair 参数的函数?
【问题讨论】:
-
您可以通过提供显式构造函数来告诉编译器使用什么重载。
-
@OutOfBound 我该怎么办?可以举个例子吗?
标签: c++ c++11 overloading c++17