这是对这个问题的跟进
考虑以下代码
#include <variant>
int add_(int a, int b){
return a+b;
}
float add_(float a, float b){
return a+b;
}
float add_(int a, float b){
return a+b;
}
float add_(float a, int b){
return a+b;
}
using Number = std::variant<int, float>;
Number add(Number const& lhs, Number const& rhs ){
return std::visit( []( auto& lhs_, auto& rhs_ )->Number { return {add_( lhs_, rhs_ )}; }, lhs, rhs );
}
int main(){
Number a = 1.f;
Number b = 2.f;
Number c = add(a, b);
}
通过将越来越多的类型添加到 number 并可能具有依赖于 2 个以上参数的函数,很快就会清楚,我需要定义很多函数,即在 std::variant 中找到的所有可能的参数组合。
然而,并非所有组合都是可能的和/或需要的。如果我尝试调用未针对特定参数组合重载的函数,如何仅定义我需要的函数并引发异常?例如,假设我只想保留 add_(int, int) 或 add_(float, float) 函数。