C++ 如何访问静态函数中的其他类实例变量
我真的需要访问“IsValid”函数中的“utilityls”。有没有一个简单的方法可以做到这一点?或者有没有其他方法或解决办法?对不起,如果这是一个愚蠢的问题。伙计们,请帮帮我…你们有一个静态函数。如何访问成员变量?要么使变量为静态函数,要么使函数为非静态函数。您得到了一个静态函数。如何访问成员变量?要么使变量为静态变量,要么使函数为非静态变量。如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如 甲级; a、 utilityCls.ProcessData() 如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如 甲级;C++ 如何访问静态函数中的其他类实例变量,c++,static,C++,Static,我真的需要访问“IsValid”函数中的“utilityls”。有没有一个简单的方法可以做到这一点?或者有没有其他方法或解决办法?对不起,如果这是一个愚蠢的问题。伙计们,请帮帮我…你们有一个静态函数。如何访问成员变量?要么使变量为静态函数,要么使函数为非静态函数。您得到了一个静态函数。如何访问成员变量?要么使变量为静态变量,要么使函数为非静态变量。如果不先创建类的实例,就无法访问实例变量。要么使IsValid非静态,要么向静态方法添加代码,如 甲级; a、 utilityCls.ProcessD
a、 utilityCls.ProcessData() 静态成员函数与类相关,而不是与该类的任何实例相关。它很像一个被声明为类之友的全局函数(有一种奇怪的名称,包括前面加上的类名)
一句话:要访问(非静态)数据,您需要指定一个类的实例,该类的数据将与该类一起使用(就像使用友元函数一样)。静态成员函数与该类相关,而不是与该类的任何实例相关。它很像一个被声明为类之友的全局函数(有一种奇怪的名称,包括前面加上的类名)
一句话:要访问(非静态)数据,您需要指定一个类的实例,该类的数据将与该类一起使用(就像您使用友元函数一样)。而不是将
IsValid
设为全局函数(您在这里无意中这样做了)或成员函数(我确信这是您的真实意图),将其设为,并在函子的构造函数中传递要使用的实例
像这样:
//ClassA.h
Class ClassA
{
private:
UtilityClass utilityCls; // this is the instance that I need to access
virtual void Read();
static bool IsValid(char c);
}
//ClassA.cpp
void ClassA::Read()
{
....
string str = "abcdefg"; // sample only
if(find_if(str.begin(), str.end(), IsValid) == str.end())
{
....
}
}
inline bool IsValid(char c)
{
// There are compile errors When I call functions of Utility class here
// Ex: utilityCls.ProcessData();
return (isalpha(c)); // sample only
}
不要将
IsValid
设置为全局函数(您在这里意外地执行了此操作)或成员函数(我确信这是您的真实意图),而是将其设置为,并在functor的构造函数中传递您要使用的实例
像这样:
//ClassA.h
Class ClassA
{
private:
UtilityClass utilityCls; // this is the instance that I need to access
virtual void Read();
static bool IsValid(char c);
}
//ClassA.cpp
void ClassA::Read()
{
....
string str = "abcdefg"; // sample only
if(find_if(str.begin(), str.end(), IsValid) == str.end())
{
....
}
}
inline bool IsValid(char c)
{
// There are compile errors When I call functions of Utility class here
// Ex: utilityCls.ProcessData();
return (isalpha(c)); // sample only
}
类的静态函数实际上是元函数:这些函数对整个类有用,但对类的任何特定对象都不有用。因此,它们无法访问特定对象的成员,尤其是缺少大多数成员函数包含的隐含
这个指针
如果需要静态类来访问对象的成员,则必须显式地传递指向该对象的指针或引用。通常最好使函数非静态
另外,您对IsValid的定义不正确,它应该是内联bool ClassA::IsValid(char c)
类的静态函数实际上是元函数:这些函数对整个类有用,但对类的任何特定对象都没有用。因此,它们无法访问特定对象的成员,尤其是缺少大多数成员函数包含的隐含这个指针
如果需要静态类来访问对象的成员,则必须显式地传递指向该对象的指针或引用。通常最好使函数非静态
另外,您对IsValid的定义不正确,应该是内联bool ClassA::IsValid(char c)
请发布真实代码。这甚至不会编译请发布真实代码。这甚至不会编译
void ClassA::Read()
{
....
string str = "abcdefg"; // sample only
if(find_if(str.begin(), str.end(), IsValid(utilityCls)) == str.end())
{
....
}
}