我现在是一个在读高三牲,平常的爱好就是捣鼓程序,我主要是用python语言的,但是我以前的信息老师说单学习一门语言对未来的工作是不利的,于是我现在经常搞一些为学校专供的项目,都是基于多种(语言)开发的,现在差不多是全栈程序员。
最近开始捣鼓C++,希望能用C++来搞定我以前用Python开发的项目以提高效能和降低资源占用,但是我以前的项目都涉及到了多类型的列表,C++都是固定类型的,这对我很不利,但是以前也接触过C语言,也算有一点了解,所以在网上冲浪找答案无果后我开始独立构思,并且付诸实践
这是我最开始的思路:首先建立一个PyType类,内有类成员变量
char *valueType;
auto getValue();
我试图用再赋值的方式来控制返回值的类型:
auto getValue(){
return value;
}
this->getValue=getValue;

但是没一会就发现好像没办法赋值。。。
难道就要止步于此了吗?
不不不,我发现了这个:
template

那么到这里逻辑就很清晰了,直接做一个容器PyType,用
private:
std::string valueType;
void* value;
先声明变量value
接着就可以在初始化函数里完成一系列的逻辑了,
最后在PyList中一个一个的把用户传入的value赋值给PyType,然后储存到std::vector values;中
在校生本来时间也不充裕就讲到这吧,代码贴出来大家研究一下
#include
#include
#include
#include
class PyType {
private:
std::string valueType;
void* value;
public:
template
PyType(T __value__) {
valueType = typeid(__value__).name();
value = new T(__value__);
}
template
T getValue() {
return *static_cast(value);
}
std::string getType() {
return valueType;
}
};
class PyList {
private:
std::vector values;
public:
PyList() {}
template
void append(T value) {
values.push_back(PyType(value));
}
template
T get(int index) {
return values[index].getValue();
}
std::string getType(int index){
return values[index].getType();
}
int getlength(){
return(values.size());
}
};
int main() {
PyList mylist;
mylist.append(10);
mylist.append("Hello");
mylist.append(3.14);
mylist.append(" Hello World! ");
for(int i=0;i<100;i++){
mylist.append(i);
}
// std::cout << "Element at index 0: " << mylist.get(0) << std::endl;
// std::cout << "Element at index 1: " << mylist.get(1) << std::endl;
// std::cout << "Element at index 2: " << mylist.get(2) << std::endl;
for(int i=0;i(i);
}else if (typeofValue=="NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"){
std::cout<(i);
}else if (typeofValue=="d"){
std::cout<(i);
}
//添加换行符
std::cout<
标签: