我想继承一个模板类,并使用“using”继承它的构造函数。但是,当我调用移动构造函数时,在“无匹配的构造函数”中失败
#include <iostream>
template <typename ARG>
class TBase {
public:
TBase() {}
TBase(TBase<ARG>&& t) {}
private:
ARG arg;
};
class Int : public TBase<int> {
public:
using TBase<int>::TBase;
};
int main() {
TBase<int> t1;
Int t2(std::move(t1));
return 0;
}
构建结果
In function 'int main()':
20:23: error: no matching function for call to 'Int::Int(std::remove_reference<TBase<int>&>::type)'
20:23: note: candidates are:
13:7: note: Int::Int()
13:7: note: candidate expects 0 arguments, 1 provided
13:7: note: Int::Int(Int&&)
13:7: note: no known conversion for argument 1 from 'std::remove_reference<TBase<int>&>::type {aka TBase<int>}' to 'Int&&'
答案 0 :(得分:1)
嗯,问题很容易解释:
默认,复制和移动是特殊的。它们不是通过继承ctors继承的。有关详细信息,请read more about inheriting constructors here。
因此,编写自己的ctor接受基类实例。当你试图简单地继承ctors时,不应该太难。