回调函数
以实现文本字母大小写的转化为例子:
#include <iostream>
#include <fstream>
#include <string>
//将字符串转成大写
std::string toUpperCase(const std::string& text)
{
std::string result = text;
for (char& c : result)
{
c = std::toupper(c);
}
return result;
}
//将字符串转成小写
std::string toLowerCase(const std::string& text)
{
std::string result = text;
for (char& c : result)
{
c = std::tolower(c);
}
return result;
}
typedef std::string(*TextTransform)(const std::string& text);
//回调函数
void callback(const std::string &inFile, const std::string &outFile, TextTransform transform)
{
std::ifstream inputFile(inFile);
if (!inputFile)
{
return;
}
std::ofstream outputFile(outFile);
std::string line;
while (std::getline(inputFile, line))
{
std::string temp = transform(line);
outputFile << temp << std::endl;
std::cout << temp << std::endl;
}
inputFile.close();
outputFile.close();
}
不使用回调函数
int main()
{
std::ifstream inputFile("./testFile/textFile.txt");
if (!inputFile)
{
return 1;
}
std::ofstream outFile("./testFile/upperFile.txt");
std::string line;
while (std::getline(inputFile, line))
{
// 在这里选择执行哪个操作
// 如果要将文本转换为大写,使用 toUpperCase 函数
// 如果要将文本转换为小写,使用 toLowerCase 函数
// 输出到 outputFile
}
inputFile.close();
outFile.close();
return 0;
}
使用回调函数
int main()
{
std::string inputFile = "./testFile/textFile.txt";
std::string outputFile = "./testFile/upperFile.txt";
callback(inputFile, outputFile, toUpperCase);
return 0;
}
使用回调函数的好处:
1、便于模块化:允许传入函数,对文件的处理过程进一步封装。
2、可拓展性:可以添加新的文本转换操作,无需再修改callback函数