【发布时间】:2018-10-02 19:26:21
【问题描述】:
到目前为止,我一直在使用 C++11 进行编码,并试图了解 auto 在较新版本中的工作原理。特别是我有两个函数(示例中的 f1 和 f2)在给定的结构上工作。这两个函数几乎相同,但它们在操作的成员上有所不同,有时操作是一个值的倒数,等等......(这个例子是对真实程序的过度简化)。
我想避免使用条件和重载函数来实现这种行为。你知道一种更清洁或更惯用的方法吗?这段代码中是否有我遗漏的问题?
typedef struct thing_t {
double A;
double B;
} THING;
double get_A(const THING &t) {
return t.A;
}
double get_B(const THING &t) {
return t.B;
}
double convert(const THING &t, auto first, auto then) {
return first(t) / then(t);
}
double f1(const THING &t) {
return convert(t, get_A, get_B);
}
double f2(const THING &t) {
return convert(t, get_B, get_A);
}
int main() {
THING t = {1.0, 2.0};
std::cout << f1(t) << std::endl;
std::cout << f2(t) << std::endl;
return 0;
}
非常感谢您花时间审查我的问题。
【问题讨论】:
-
示例代码是你想要实现的吗?除了你可以将
convert更改为模板template<typename A, typename B> double convert(const THING &t, A first, B then)
标签: c++ c++11 c++14 dry overloading