将一个类模板声明为另一个类模板的友元类
时间: 2024-02-11 11:07:02 浏览: 80
如果你想让一个类模板成为另一个类模板的友元类,你可以将该类模板的实例化版本作为友元类声明。当然,你也可以将该类模板本身作为友元类声明,这样将会允许该类模板的所有实例化版本都作为友元类。
下面是一个将一个类模板声明为另一个类模板的友元类的示例代码:
```
template<typename T>
class MyTemplateClass {
public:
MyTemplateClass(T value);
void printValue();
private:
T m_value;
};
template<typename T>
MyTemplateClass<T>::MyTemplateClass(T value) : m_value(value) {}
template<typename T>
void MyTemplateClass<T>::printValue() {
std::cout << "The value is: " << m_value << std::endl;
}
template<typename T>
class MyFriendClass {
public:
void printValue(const MyTemplateClass<T>& obj) {
std::cout << "The value is: " << obj.m_value << std::endl;
}
};
int main() {
MyTemplateClass<int> obj(42);
MyFriendClass<int> friendObj;
friendObj.printValue(obj);
return 0;
}
```
在这个示例代码中,我们定义了一个类模板`MyTemplateClass`,和另一个类模板`MyFriendClass`。我们将`MyFriendClass`声明为`MyTemplateClass`的友元类,并在`MyFriendClass`中定义了一个成员函数`printValue`,该函数接受一个`MyTemplateClass`类型的对象作为参数,并打印出这个对象的私有成员`m_value`。
在`main`函数中,我们实例化了一个`MyTemplateClass`对象,并创建了一个`MyFriendClass`对象`friendObj`,然后通过`friendObj.printValue(obj)`调用了`MyFriendClass`的`printValue`函数,输出了`MyTemplateClass`对象的私有成员值。
需要注意的是,我们在实例化`MyFriendClass`的时候传入了模板参数`int`,这样才能够使`MyFriendClass`和`MyTemplateClass<int>`成为友元类。如果你想使用其他类型,你需要进行相应的实例化。
阅读全文