28

我试图从 Bjarne Stroustrup 的“C++ 编程语言”中了解 C++ 中的“辅助函数”是什么。但是这本书没有解释任何关于它以及在课堂上使用它的目的。我尝试在 Web 上搜索它并找到了这个[注意:死链接]。我已经掌握了它的要点,但仍然不清楚辅助函数的真正目的是什么,我应该什么时候使用它们,总的来说,什么是辅助函数?

4

4 回答 4

33

“辅助功能”不是您在标准中可以找到的术语,也没有确切的定义......标准多次提到“辅助类”“辅助模板”来指代一个类,这并不意味着由最终用户实例化,但它提供了在另一个类内部使用的有用功能。

辅助函数是(我相信大多数人说这句话时的意思)通常包含一些您将要重复使用的有用功能的函数,很可能会一遍又一遍地重复使用。您可以创建用于多种不同目的的辅助函数...

一个例子可能是任何类型的转换函数,例如将多字节编码的函数转换std::stringstd::wstring

std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo( size_needed, 0 );
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}
于 2013-10-09T11:07:21.080 回答
9

CppCoreGuidline中对辅助函数有一个很好的定义:

辅助函数是不需要直接访问类表示的函数(通常由类的编写者提供),但被视为类的有用接口的一部分。将它们放置在与类相同的命名空间中,使它们与类的关系显而易见,并允许通过参数相关查找找到它们。

有关更多信息,您可以通过一个清晰的示例检查该段落,从中获取上引号。

于 2016-02-19T13:18:27.523 回答
2

一个示例可能是您将在整个主函数中重用的输入验证函数。假设你有一个程序询问用户的年龄,因为年龄是一个大于 0 的整数,你需要一个单独的函数来处理“cin >> users_age;”。如果输入满足条件语句,则继续,否则要求用户重新输入他们的年龄。

这只是“辅助功能”的一个例子。如果我错了,请纠正我的读者。谢谢!

于 2014-11-10T22:27:29.493 回答
1

Bjarne Stroustrups 书中描述了“帮助函数”,我昨天刚刚读到它们。根据 Stroustrup 的说法,一个好的类设计应该将实现一个类的函数数量保持在最低限度。根据 Stroustrup 的说法,你不想在一个类中有 50 个函数。相反,您使用使用类接口的“帮助函数”(调用成员函数)。他们可能(不确定)在共享命名空间中定义,以赋予他们的“关系”意义。您可以在本书第 9 章第 9.7.5 节中找到该段落

于 2018-05-01T13:56:13.893 回答