在 c++ 中使用函数或类来完成简单的任务
Using a function or class in c++ for a simple task?
我想在我的程序中编写一个实用程序,可以将字符串转换为 int。我知道我可以使用它 atoi 或 strtol,但我需要对它进行一些错误处理。哪种方法更好?我应该创建一个简单的全局函数,也许只在特定命名空间中,还是创建一个具有可以为我完成它的成员的类?
例如:
namespace utility{
int ConvertStrToInt(std::string* str, int& convertednum)
{
//do the conversion and error handling
return convertednum;
}
}
或
class Utility{
public:
static int ConvertStrToInt(std::string* str, int& convertednum)
{//do the conversion and error handling here}
}
对不起,如果这个问题听起来有点傻,但我和另外 2 个人在一个团队中,我们对此的看法非常不同。 1 说类是针对一切的,并为一切制作类,我认为对于这么简单的问题,一个简单的函数是一个很好的解决方案。
那么哪个更有效率呢?我什么时候应该使用一个简单的函数,什么时候从哪里类是好的解决方案?
谢谢大家!
你上面写下来的类Utility
在某种程度上与面向对象编程背后的思想相矛盾,因为该方法既不使用也不依赖于类的任何成员。 类应该是在这些属性上具有某些属性和方法的对象。
如果在转换中使用状态很有用,请使用类。 最好是一个函子,以便您可以将实例作为可调用实体传递。如果没有状态,则使用函数。
顺便说一句,您的签名和返回类型可能如下所示:
int ConvertStrToInt(const std::string& str);
编辑 关于这个特定示例,C++标准库已经提供了此功能,因此您无需重新实现它。
namespace
是解决这个问题的常用方法。
无论如何,类中的函数都应该声明static
,并且拥有一个类以便您可以将函数组合在一起并不是好的做法。
都不是。选择函数对象(有时称为 Functor)。
struct str_to_int {
int operator()(const std::string& s) const { return 23; }
};
为什么?这使您能够在需要时添加状态。它有效拥有所有标准算法设施和各种现代C++图书馆。您可以使其成为模板函数,而无需您的用户注意到它。
现在,您可以执行以下操作:
std::vector<std::string> strings;
std::vector<int> integers;
std::transform(begin(strings), end(strings),
std::back_inserter(integers), str_to_int());
或者有一天把你的定义变成:
struct str_to_int {
int operator()(const std::string& s) const { return 23; }
// ha
int operator()(const std::wstring& s) const { return 42; }
// haha!
int operator()(const char* x) const { return 42; }
};
上面的代码将继续工作而不会出现问题。免费函数的情况并非如此。
随机评论:为什么要传递指向string
的指针类似的东西?
我通常只使用一个函数。 把它放到一个类中只是噪音(或伪 OO,因为该类没有任何实际行为它自己的)。
有一个例外:STL 的功能模板参数是如果您使用带有operator()()
的类,通常效率更高,而不是函数。 (如果使用功能对象,则实际被调用的函数是一个编译时常量,可以很容易地内联。 如果使用函数,则模板参数的类型为函数,而不是函数本身,并且内联的可能性较小。但是,即使在这种情况下,我也会从函数开始,并添加功能对象类型(如果需要)。
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 有没有任务栏API可以立即应用注册表更改
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- QSETTINGS简单任务不起作用
- 在 c++ 中使用函数或类来完成简单的任务
- 用于流程/任务调度的简单离散事件模拟库 (C++)
- C++:简单的任务,析构函数被多次调用
- 简单C++程序在多个实例中启动,任务管理器无法关闭它
- 遍历数组的简单任务.以下哪种解决方案最有效
- 为什么这个简单的任务没有定义行为
- 简单的c++程序无法作为计划任务运行(交互式/非交互式问题?)
- 为游戏(和其他任务)提供简单而有效的UDP服务器策略
- 多线程——希望是一项简单的任务