我想做以下事情:
template <typename T>
struct foo
{
template <typename S>
friend struct foo<S>;
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
但我的编译器(VC8)扼杀了它:
error C3857: 'foo<T>': multiple template parameter lists are not allowed
Run Code Online (Sandbox Code Playgroud)
我想有所有可能的实例template struct foo朋友foo<T>所有T.
我该如何工作?
编辑:这个
template <typename T>
struct foo
{
template <typename>
friend struct foo;
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
似乎编译,但它是否正确?朋友和模板的语法非常不自然.
我有一个模板化的容器类.我正在重载赋值运算符,以便也可以分配派生类型.
我的问题是,当类型不一样时,我无法访问容器类的私有成员.获得访问权限的最佳方法是什么?无法通过公共getter访问成员变量.谢谢!
示例代码:
// Note: var is private
template <class T>
Container<T>& Container<T>::operator=(const Container<T>& rhs) {
if(*this != rhs) var = rhs.var; // works for same type
return *this;
}
template <class T>
template <typename U>
Container<T>& Container<T>::operator=(const Container<U>& rhs) {
if(*this != rhs) var = rhs.var; // does NOT work for different types
return *this;
}
Run Code Online (Sandbox Code Playgroud)