相关疑难解决方法(0)

如何将模板化的struct/class声明为朋友?

我想做以下事情:

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)

似乎编译,但它是否正确?朋友和模板的语法非常不自然.

c++ templates friend

54
推荐指数
1
解决办法
2万
查看次数

从模板化的类赋值运算符访问私有成员变量

我有一个模板化的容器类.我正在重载赋值运算符,以便也可以分配派生类型.

我的问题是,当类型不一样时,我无法访问容器类的私有成员.获得访问权限的最佳方法是什么?无法通过公共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)

c++ templates

17
推荐指数
1
解决办法
3796
查看次数

标签 统计

c++ ×2

templates ×2

friend ×1