gpt4 book ai didi

c++ - 模板类复制内部类问题中的模板赋值运算符

转载 作者:太空狗 更新时间:2023-10-29 20:55:03 28 4
gpt4 key购买 nike

我有一个包含内部类的模板类。在 operator=() 重载上,我想复制内部类的一个实例,但出现错误:

no known conversion from 'const foo<double>::bar' to 'const foo<int>::bar'

代码如下(您可以找到示例 here ):

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 成为 friend ,例如 foo 是 foo 的所有特化的 friend 。但是我不知道怎么介绍。

旁注:请随意更改标题,因为我真的不知道如何为这个特定问题命名。

最佳答案

foo<double>::bar是与 const foo<int>::bar 完全无关的类型, 所以你不能在它们之间隐式转换。

bar似乎不依赖于模板参数,这似乎是一个明智的解决方案:

Moving bar outside foo works fine

问题解决:)

but the inner class should be part of foo.

考虑到你如何使用它,我认为不,它不应该是 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++ - 模板类复制内部类问题中的模板赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37114078/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com