C 通过未知名的变量到方法
C++ Pass variable of unknown name to method
在C 中是否有一种方法将变量传递给方法,其中该变量可能是几个不同变量(相同类型)的变量之一,具体取决于该方法的位置。
例如:
一种检查文件是否具有正确名称的方法。
在程序中的某一时刻,我可能想检查一个用户文件,因此用户将用户名输入字符串变量用户名,然后将其传递给checkfile:
bool LotterySystem::CheckFile(const std::string &USERNAME)
{
//if file exists, return false, else return true
FILE *fin = fopen((USERNAME + ".txt").c_str(), "r");
if (fin)
{
fclose(fin);
return false;
}
return true;
}
在另一点我可能想检查存在带有库存信息的文件,因此用户输入了他们希望检查到字符串变量stocktype的库存:
bool LotterySystem::CheckFile(const std::string &STOCKTYPE)
{
//if file exists, return false, else return true
FILE *fin = fopen((STOCKTYPE + ".txt").c_str(), "r");
if (fin)
{
fclose(fin);
return false;
}
return true;
}
是否有一种方法可以通过任何名称传递通用字符串变量,即可进行检查,而不必为要检查的每个文件名具有不同的检查文件方法吗?
您不需要不同的CheckFile
方法。实际上,拥有多个会导致多个定义错误,因为您定义了两种具有相同签名的方法。
只需用不同的参数称呼它:
LotterySystem ls;
ls.CheckFile("MyNameIsFred");
ls.CheckFile("MyPreferredPreferredStockName");
似乎您想传递const std::string
类型的不同值,在C 中,可以简单地使用单个函数传递。您将必须更改所调用的函数的值,而不是创建bool LotterySystem::CheckFile
方法的不同实例。
,而且,没有编译器会编译相同函数的两个实例,具有相同的参数。
bool LotterySystem::CheckFile(const std::string &USERNAME)
{
//if file exists, return false, else return true
FILE *fin = fopen((USERNAME + ".txt").c_str(), "r");
if (fin)
{
fclose(fin);
return false;
}
return true;
}
然后致电:
LotterySystem mySystem;
std::string sName = "John Doe", sStockName = "ZXY";
bool nameFileExists = mySystem.CheckFile(sName);
bool stockFileExists = mySystem.CheckFile(sStockName);
似乎您想通过更改签名中的名称来更改函数的语义。那不是它的工作方式。正如克里斯在评论中指出的那样,无论您通过什么string
,函数的语义保持不变 - 只有返回值才会更改,具体取决于CheckFile
返回中使用的功能。给字符串一个不同的名称不是创建另一个CheckFile
的过载,并且不会以任何方式更改功能中的语义或代码流。
您想要的是每个用途的专用功能。CheckFile
应该只做名称所建议的事情(好吧):检查是否存在由您通过的string
表示的txt
文件。
在CheckFile
上分层您可能需要实现其他功能,以检查不同类型的文件。话虽如此,如果您要处理文本文件,则需要解析和验证内容,以确保您实际上有一个有效的用户文件或库存INFO文件。本质上,您想要这样的东西:
bool IsUserFile(const std::string&); // validates text-file contents
bool processUserFile(const std::string& path) // path omitting the extension '.txt'
{
if(!(CheckFile(path) && IsUserFile(path)))
return false;
// open file process contents
// return true if successful, false otherwise
}
类似于股票-INFO文件。
在另一个注意事项上,无需使这样的函数a 成员函数 LotterySystem
,如果您坚持使其成为成员函数,请考虑使其成为static
成员函数 - 它是't取决于 LotterySystem
的实例。
另外,如果我正确理解您的意图,您要检查文件是否存在。因此,如果CheckFile
功能可以打开文件,则需要返回true
。目前,它确实相反。如果我错了,请发表评论。
请注意:仅通过查看您的应用程序是否可以打开它是一个非常有限的案例,才检查是否存在文件。它可能存在,fopen()
仍然无法打开它,无论是由于特权不足还是其他条件。
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 枚举环境变量的惯用C++14/C++17方法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 打印所有继承的类成员变量和方法
- C++方法中的引用变量
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有一种通用的方法来实现不变量
- 有没有将变量名称转换为双指针的简短方法?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 比较C++变量的最有效方法
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 存储变量的更有效方法是什么?
- 对具有相同方法的不同类使用一个变量
- 如何使用另一个变量访问对象的变量/方法
- C++,静态局部变量(方法)与全局(文件)变量有什么区别
- Awesomium允许我在JS中调用/使用c++变量/方法吗?