gpt4 book ai didi

C++:使用具有不同运算符和类方法的相同函数布局

转载 作者:行者123 更新时间:2023-11-27 23:06:12 24 4
gpt4 key购买 nike

我有一个像下面这样的功能布局:

bool foo( object1, object2, method_x, op_y, method_z ) {
if (object1.method_x() op_y object2.method_z()) {
do something;
}

对象 object1 和 object2 总是来自同一个类。但是它们的方法和中间的运算符是任意的。我知道您可以将运算符作为模板参数传递,这样就可以完成工作。但是成员函数呢?如果有帮助,他们不接受任何争论。

最佳答案

如果您想避免打字,宏是这里常用的(邪恶的)机制。

在 C++1y 中,您可以使用多态 lambda 来实现类似的功能。

foo(object1, object2, 
[](auto o) { return o.method_x(); },
[](auto a, auto b) { return a == b },
[](auto o) { return o.method_z() });

当然只要方法是这样就可以

foo(object1, object2, 
std::memfn(&Object1::method_x),
[](auto a, auto b) { return a == b },
std::memfn(&Object2::method_z));

更新:由于您添加了可以限制类型的内容,因此您可以将所有 auto 替换为适当的类型并可能使用

template <typename T, typename Mx, typename Op, typename Mz>
bool foo(T& object1, T& object2, Mx method_x, Op op_y, Mz method_z ) {
if (op_y(method_x(object1), method_z(object2)) {
// do something;
}

关于C++:使用具有不同运算符和类方法的相同函数布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com