【发布时间】:2019-05-12 00:36:53
【问题描述】:
我希望继承所有的方法,包括std::array的构造函数。我试试
template<class T, size_t N>
class Vec : public array<T, N>
{
public:
using array<T, N>::array;
Vec operator+(Vec const& rhs) const
{
Vec res;
transform(begin(), end(), rhs.begin(), res.begin(), plus);
return res;
}
};
但是出现了一些编译错误。
- 'begin':找不到匹配的重载函数
- 我不能像 std 数组那样做
Vec<int, 2> v{1, 2};,即使构造函数是继承的。
我可能会误解一些东西。如何解决这些错误。在 std::array 上添加算术运算符的任何更好的想法。谢谢!
【问题讨论】:
-
首先你有一个错字(res 应该是 rhs),第二个 std::plus 是一个类型,transform 需要 该类型的一个实例,第三个你需要使用这个-> 在开始和结束之前(我认为是关于两阶段查找的东西?)。第四,Lightness所说的。删除 using array
::array 来修复大括号初始化(我不知道为什么,但我认为这与没有用户定义 ctor 的数组有关?)...I think it works now? -
如果这是 minimal reproducible example 肯定会很棒,因此任何想要复制/粘贴它的人都不需要提供所有其他内容。
-
小心stackoverflow.com/questions/2034916/… 我认为它还不适用,但我总是使用 has-a container 而不是 is-a container,以防有人试图扩展类。跨度>
标签: c++ c++11 c++14 c++17 stdarray