模板类复制内部类问题中的模板分配运算符
Template assignment operator in template class copying inner class issue
我有一个包含内部类的模板类。在运算符=()重载上,我想复制内部类的一个实例,但得到一个错误:
no known conversion from 'const foo<double>::bar' to 'const foo<int>::bar'
代码看起来像(你可以在这里找到一个例子):
template<typename T>
class foo {
public:
template<typename>
friend class foo;
class bar {
std::string inner_str;
public:
bar const& operator=(bar const& r) {
inner_str = r.inner_str;
return *this;
}
};
template<typename F>
foo const& operator=(foo<F> const& r) {
value = static_cast<T>(r.value);
str_container = r.str_container;
return *this;
}
private:
bar str_container;
T value;
};
将bar
移到foo
之外可以很好地工作,但是内部类应该是foo
的一部分。
如何解决此问题我想过让bar
成为朋友,就像foo是foo所有专业的朋友一样。但我不知道如何介绍他们。
旁注:请随意更改标题,因为我真的不知道如何命名这个特定的问题
foo<double>::bar
是与const foo<int>::bar
完全无关的类型,因此不能在它们之间隐式转换。
由于bar
似乎不依赖于模板参数,因此这似乎是一个明智的解决方案:
在foo外移动酒吧效果良好
问题已解决:)
但是内部类应该是CCD_ 8的一部分。
考虑到你如何使用它,我认为不,它不应该是foo
的一部分。
或者,您可以将bar
的赋值运算符作为模板,就像使用foo
:的赋值运算符一样
template<typename B>
bar const& operator=(const B& r) {
inner_str = r.inner_str;
return *this;
}
template<typename U>
friend class foo<U>::bar; // this bar must be friends with other bars
如果bar
的定义确实依赖于foo
的模板参数,那么您可以使用这种方法。否则,在每个foo
中定义一个相同但独立的内部类是没有多大意义的。
相关文章:
- 正在尝试重载二进制搜索树分配运算符
- 自定义先决条件对移动分配运算符有效吗
- 分配给转换运算符失败-C++
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 使用 'new[]' 运算符分配内存
- 操作后通过运算符分配对象
- 新运算符分配的大小大于声明的大小.为什么
- 如何控制运算符 [] 分配的值
- 字符** 使用 new 运算符分配内存
- 新的运算符分配函数顺序连续性和初始值
- 如何释放使用 C++ "new" 运算符分配的 C 中的内存
- 只能使用CUDA中的新运算符分配有限的内存
- 使用友元运算符分配和私有变量是不可访问的
- 释放由赋值运算符C++分配的内存
- 确定C++中新运算符分配的内存大小
- 用于新运算符分配的公共内存
- 如何在C++中检索由新运算符分配的对象的地址