gpt4 book ai didi

c++ - 我应该为具有不同类型参数的类使用 Boost Variant

转载 作者:太空狗 更新时间:2023-10-29 21:41:55 25 4
gpt4 key购买 nike

我是 C++ 的新手,我不确定为类建模以表示列表的最佳方法;其中一列是一个带有名称(字符串)的 STL vector 的包装器,应该是 Column<int> , Column<float>Column<std::string> .

目前我已将其硬编码为 Column<int>但需要支持Column<float>Column<std::string> .

我应该走 boost 变体路线(又名标记 union )吗?

boost::variant<Column<int>*, Column<float>*, Column<std::string>*>

不确定是否有更好的解决方案,因为它只是类型参数不同。

不胜C++大神赐教

template <typename T>
class Column
{
public:
Column(std::string& name, std::vector<T>& vec) : name(name), vec(vec) {}
T& at(const size_t i) { return vec[i]; }
private:
std::string name;
std::vector<T> vec;
};

class Table
{
public:
Table(std::string& name) : name{name} {}

void addColumn(Column<int>* vec)
{
columns.push_back(vec);
}

Column<int>*& getColumn(const size_t i)
{
return columns[i];
}
private:
std::string name;
std::vector<Column<int>*> columns;
};

最佳答案

是的,为此使用 Boost.Variant 是合理的。但是,您根本不需要使用指针;相反:

boost::variant<Column<int>, Column<float>, Column<std::string>>

关于c++ - 我应该为具有不同类型参数的类使用 Boost Variant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682116/

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