gpt4 book ai didi

c++ - 从继承的模板类中正确实现虚函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:43 24 4
gpt4 key购买 nike

我在这里有点困惑!假设我有一个接口(interface)

template <typename T>
class JsonSerializable {

public:

virtual json AsJson() const;

virtual T FromJson(json in) const;

};

如何在类或结构中正确使用此接口(interface),例如:

struct X : public JsonSerializable<X>
{
float a;
float b;

virtual json AsJson() const override
{
return json();
}

RankingInfoTerm FromJson(json in)
{
RankingInfoTerm out;
return out;
}

};

现在无论我尝试什么,我都会收到一堆链接器错误。我怀疑我遗漏了一些非常明显的东西。感谢任何帮助和解释!

最佳答案

您没有包含任何我们可以尝试的正确代码,也没有显示哪种错误消息特别困扰您,但这里是关于如何从模板接口(interface)覆盖方法的示例:

template <class T>
class JsonSerializable {
public:
virtual ~JsonSerializable() = default;
virtual T fromJson(/* inpur args here */) = 0;
};

template <class T>
class X: public JsonSerializable<T> {
public:
~X() override = default;
T fromJson(/* inpur args here */) override {
// put here some real impl
return T();
}
};

int main() {
std::shared_ptr<JsonSerializable<float> > ptr2Base;
ptr2Base.reset(new X<float>); // template arguments of X and SerializableJson must be the same
std::cout << ptr2Base->fromJson() << std::endl;
return 0;
}

fromJson 签名中,我没有使用任何输入参数来编译示例。当然,稍后您可能想要编写真正的实现:

T fromJson(const SomeKindOfJson& json) {
// convert json to type T and return it
}

关于c++ - 从继承的模板类中正确实现虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55688189/

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