这似乎不可能,但是我认为拥有我想要的东西是合理的。我有以下代码:
template <typename T>
class Data{
T getData() {
return data;
}
private:
T data;
};
template <typename T>
class Base : public Data<T> {
public:
void someCommonAction() { }
};
class DerivedInt : public Base<int> {
};
class DerivedFloat : public Base<float> {
};
我想将派生对象分配给Base
类,但是编译器抱怨Base
需要模板参数:
Base b = DerivedInt{};
我知道Base
类模板本身不是一个完整的类,但是这样的要求对我来说是很合理的。有什么其他选择可以实现我想要的吗?
答案 0 :(得分:1)
理解基类模板本身不是一个完整的类,但是这样的要求对我来说是相当合理的。有什么其他选择可以实现我想要的吗?
合理,但您需要模板参数推导;因此,从C ++ 17开始,您可以添加一些内容
template <typename T>
Base(Base<T>) -> Base<T>;
和
Base b = DerivedInt{};
应该工作。
非主题:观察
template <typename T>
class Data{
T getData() {
return data;
}
private:
T data;
};
getData()
方法是私有
我想你的意图是公开
模板
class Data{
public:
T getData() {
return data;
}
private:
T data;
};
或将Data
设为struct