gpt4 book ai didi

c++ - 寻找一种方法来实现将操作作为参数的表达式

转载 作者:行者123 更新时间:2023-11-30 02:25:23 24 4
gpt4 key购买 nike

我有一个可以处于两种状态之一的类。

假设成员变量m_bCond决定了一个对象的状态。

现在,在许多类成员函数中,我有以下代码模式:

if (m_bCond)
{
do some operation on 'm_vector[m_index]'
}
else
{
for (const auto& item : m_vector)
{
do some operation on 'item'
}
}

我可以使用任何好的语法来更“整齐地”完成它吗?

我希望能够使用某种表达式,并将操作作为参数传递。

类似于:

Expression(operation)
{
if (m_bCond)
{
do 'operation' on 'm_vector[m_index]'
}
else
{
for (auto item : m_vector)
{
do 'operation' on 'item'
}
}

例如,用 Python 做这件事对我来说很容易,但我对 C++ 不太确定。

我知道这可以用宏来完成,但那会让我留下一段相当难以调试的代码。所以我想我正在寻找某种 Lambda,或者可能的话寻找成员函数。

谢谢。

最佳答案

你应该能够制作一个接受 lambda/functor/function 的通用函数,并将其应用于 vector 或 vector 的元素,就像这样

template<typename Operation>
void apply(Operation operation)
{
if (m_bCond)
{
operation(m_vector[m_index]);
}
else
{
for (auto item : m_vector)
{
operation(item);
}
}
}

然后你可以像这样使用它(使用 lambda 使代码更短):

MyType foo;
//populate and set foo's members
// set condition to true
foo.apply([](auto& v){ v.push_back(10); });
// set condition to false
foo.apply([](auto& i){ i *= 42; });

关于c++ - 寻找一种方法来实现将操作作为参数的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44228065/

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