这可能是一个简单的问题,但我无法将"当前对象"传递给一个将其作为参数的自由函数.
这是一个简单的例子,说明了我的问题.
我有一个Cat类,以及一个基于Cat对象创建模因的外部函数"createCatMeme".但是如果我想让一个Cat对象对自己的模因做出"反应",并且反应是一种Cat方法,我该如何将当前的Cat传递给"createCatMeme"?
class Cat
{
std::string name;
Cat() {...}
inline react(Meme meme) {...}
inline reactToOwnMeme()
{
Meme meme = createCatMeme(/* How do I pass in the 'current' Cat object? */);
react(meme);
}
};
Meme createCatMeme(const Cat& c);
Run Code Online (Sandbox Code Playgroud)
如何将当前的Cat传递给"createCatMeme"?
使用*this.
inline reactToOwnMeme()
{
Meme meme = createCatMeme(*this);
react(meme);
}
Run Code Online (Sandbox Code Playgroud)
但是,要做到这一点,createCatMeme必须在函数定义之前声明.
我注意到reactToOwnMemedos没有返回类型.
在类定义之前声明函数.
// Forward declare the class.
class Cat;
// Declare the function
Meme createCatMeme(const Cat& c);
// Define the class.
class Cat
{
...
inline void reactToOwnMeme() // Assuming void as return type.
{
Meme meme = createCatMeme(*this);
react(meme);
}
};
Run Code Online (Sandbox Code Playgroud)
在类定义之后声明函数.为此,必须在类定义之外定义成员函数.
// Define the class.
class Cat
{
...
// Declare the member function
void reactToOwnMeme();
};
// Declare the function
Meme createCatMeme(const Cat& c);
// Define the member function
void Cat::reactToOwnMeme();
{
Meme meme = createCatMeme(*this);
react(meme);
}
Run Code Online (Sandbox Code Playgroud)