难以创建可以容纳任何数据类型的模板通用向量
Having difficulty in creating a templatized generic vector which can hold any datatype
正如主题所建议的那样,我正在尝试创建一个可以容纳任何数据类型的向量。我正在尝试使用模板,以便代码可以在将来更加可维护。
#include<iostream>
#include<memory>
#include<vector>
struct prime{
public:
template<typename T>
T get();
};
template<typename T>
struct foo: prime{
public:
T i;
foo(T k):i(k){
}
template<typename T1>
T1 get(){
return i;
}
};
/*
struct fooString :prime{
public:
std::string i;
fooString(std::string k):i(k){
}
};
*/
int main(){
std::vector<std::shared_ptr<prime>> v;
std::shared_ptr<foo<int>> p1 = std::make_shared<foo<int>>(0);
std::shared_ptr<foo<char>> p3 = std::make_shared<foo<char>>('H');
//std::shared_ptr<fooString> p2 = std::make_shared<fooString>("HK");
v.push_back(p1);
v.push_back(p3);
//v.push_back(p2);
//std::cout<<v[0]->i<<" "<<v[1]->i<<std::endl;
//std::cout<<static_cast<foo<int>>(*v[0]).get();
std::cout<<v[0]->get<int>();
}
评论的代码是我试图解决此问题的不同方法。但是我无法破解这一点。任何建议都会对我有很大帮助。我尝试遵循此操作,但是正如我所说,建立不同数据类型的结合很难维护。而且boost::variant
也无济于事,因为我必须在手动之前提供其需要保留的所有类型。我不想那个限制。谁能暗示我是否有可能,还是我只是想实现不可能的事情?我的脑海中还有另一种算法,就像铸造所有内容并存储它一样。但是这种方法看起来不合适。
谢谢:)
如果您想要的是一个可以存储任何类型的容器,但实际上不会给您任何有关它的信息 - 这取决于您只能知道哪个类型的每个元素实际上存储了,那么这正是std::any
(基于boost.any)的目的。
您的情况是:
int main(){
std::vector<std::any> v;
v.push_back(0); // an int
v.push_back('H'); // a char
v.push_back(std::string{"HK"}); // a string
std::cout << std::any_cast<int>(v[0]); // this will throw if v[0] is not an int
std::string* p = std::any_cast<std::string>(&v[1]); // this will return nullptr
// if v[1] is not a string, which
// it is not
}
相关文章:
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 如何将csv中的数据放入c++中的字符串向量中,而绝对没有任何作用
- 构造字符串向量时是否有任何副本?
- 调整向量大小并检索值,这是否正确或在任何情况下都可能导致段错误?
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 为运算符编写模板<<适用于任何向量
- 使用原始字节向量作为提升序列化的存档的任何方法
- 在 C++ 中声明向量后无法打印任何内容
- 我可以通过向量附加特征矩阵而不复制任何数据
- 调用向量内的函数指针不执行任何操作
- 将RCPP函数扩展到任何类型的输入向量
- 从字符串和向量移动以不拥有任何堆内存
- 难以创建可以容纳任何数据类型的模板通用向量
- 将STD ::向量转换为ccomsafearray的任何快速方法
- 是否有任何有效的方法来获取大型向量
- 什么不能接受字符串向量并用 offest 和 assigmnet 运算符替换任何字符串的字符?
- C++ 如何使此向量函数接受任何分隔符
- 如何创建一个接受向量的类,该向量包含任何类型的数据
- 函数不会从向量输出任何内容C++
- 为什么我看不到任何输出迭代这个向量?