我有一个类,它具有另一个类对象的向量作为成员。在这个类的许多函数中,我必须对向量中的所有对象执行相同的操作:
class Small
{
public:
void foo();
void bar(int x);
// and many more functions
};
class Big
{
public:
void foo()
{
for (size_t i = 0; i < VectorOfSmalls.size(); i++)
VectorOfSmalls[i]->foo();
}
void bar(int x)
{
for (size_t i = 0; i < VectorOfSmalls.size(); i++)
VectorOfSmalls[i]->bar(x);
}
// and many more functions
private:
vector<Small*> VectorOfSmalls;
};
我想简化代码,并找到一种不重复每个函数中的向量的方法。
我考虑过创建一个函数,它接收指向函数的指针,并在向量的每个成员上调用指向的函数。但我不确定在 C++ 中使用指向函数的指针是个好主意。
我也一直在考虑 functors 和functionoids,但它会迫使我为每个函数创建一个类,这听起来有点矫枉过正。
另一种可能的解决方案是创建一个接收字符串的函数,并根据字符串调用命令:
void Big::call_command(const string & command)
{
for (size_t i = 0; i < VectorOfSmalls.size(); i++)
{
if (command == "foo")
VectorOfSmalls[i]->foo();
else if (command == "bar")
VectorOfSmalls[i]->bar();
}
}
void Big::foo()
{
call_command("foo");
}
但它可能运行缓慢(不需要创建字符串而不仅仅是函数调用),并且如果函数具有不同的签名也会产生问题。
那么你会推荐什么?我应该让一切都和现在一样吗?
编辑:我只能使用 STL 而不能使用 boost(旧编译器)。