gpt4 book ai didi

C++ - 模板类中带有模板化参数的模板静态方法

转载 作者:行者123 更新时间:2023-11-30 02:15:49 24 4
gpt4 key购买 nike

<分区>

我有这两个类:

template <typename GeomType>
class InputCSV
{
public:
InputCSV(DataSet<GeomType> * ds) : ds(ds) {}
virtual ~InputLoaderCSV() = default;

DataSet<GeomType> * ds;
};

template <typename GeomType>
struct DataSet
{
template <typename LoaderType>
static DataSet<GeomType> Create()
{
DataSet<GeomType> ds;
ds.fileName = "something";
ds.input = std::make_shared<LoaderType<GeomType>>(&ds);
return std::move(ds);
};

DataSet(const DataSet & ds) = delete;

DataSet(DataSet && ds)
{
this->fileName = std::move(ds.fileName);
this->input = std::move(ds.input);
this->input->ds = this;

ds.input = nullptr;
}

std::string fileName;
std::shared_ptr<InputLoader<GeomType>> input;

protected:
DataSet() : input(nullptr) {}
}

现在在代码的某个地方,我想做

auto ds = DataSet<Line>::Create<InputCSV>();

其中 Line 是我拥有的某个结构。但是,这不起作用,我收到了这个错误:

error C2672: 'DataSet<Line>::Create': no matching overloaded function found
error C3206: 'DataSet<Line>::Create': invalid template argument for 'LoaderType', missing template argument list on class template 'InputLoaderCSV'
note: see declaration of 'DataSet<Line>::Create'
error cannot access protected member declared in class 'DataSet<Line>'
note: see declaration of 'DataSet<Line>::DataSet' note: see declaration of 'DataSet<Line>'

这种“语法”有什么解决办法吗,还是我得写

auto ds = DataSet<Line>::Create<InputCSV<Line>>();

和改变

ds.input = std::make_shared<LoaderType<GeomType>>(&ds);

ds.input = std::make_shared<LoaderType>(&ds);

在这个例子中,我不喜欢 InputCSV 中的“重复”,因为不能有任何其他东西。

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