【发布时间】:2020-03-20 19:31:47
【问题描述】:
我要做的是使用std::unique_ptr 来打开三种不同类型的文件(.rdr、.rrd、.drr),它们都具有基类Reader。基类以及三个阅读器类如下:
class Reader
{
protected:
vector<Read> _reads;
}
class Reader1 : public Reader
{
private:
int num;
};
class Reader2 : public Reader
{
private:
int num;
};
class Reader3 : public Reader
{
private:
int num;
};
我需要帮助的是实现以下功能:
static std::unique_ptr<Reader> create(const QString& file) {
// code here
}
这是我目前的尝试:
static std::unique_ptr<Reader> create(const QString& file)
{
return std::unique_ptr<Reader> (create(file)); // gives the error 'all paths through this function will call itself'
}
这就是我调用函数的方式:
if (tmp == "rdr") {
file = createTempFile();
auto readerfile = Reader::create(fileName);
我想我不太明白 unique_ptr 的工作原理,这可能是我无法实现此功能的原因。
【问题讨论】:
-
从
file创建Reader的实际逻辑在哪里?我想它应该在构造函数中......但没有。 -
你的意思是create函数的实现在哪里?
-
我的意思是,您的 create 函数调用...本身。无条件的。虽然它应该做一些逻辑来实际创建。
标签: c++ class inheritance static-methods