我現(xiàn)在是一個在讀高三牲,平常的愛好就是搗鼓程序,我主要是用python語言的,但是我以前的信息老師說單學習一門語言對未來的工作是不利的,于是我現(xiàn)在經(jīng)常搞一些為學校專供的項目,都是基于多種(語言)開發(fā)的,現(xiàn)在差不多是全棧程序員。
最近開始搗鼓C++,希望能用C++來搞定我以前用Python開發(fā)的項目以提高效能和降低資源占用,但是我以前的項目都涉及到了多類型的列表,C++都是固定類型的,這對我很不利,但是以前也接觸過C語言,也算有一點了解,所以在網(wǎng)上沖浪找答案無果后我開始獨立構思,并且付諸實踐
這是我最開始的思路:首先建立一個PyType類,內(nèi)有類成員變量
char *valueType;
auto getValue();
我試圖用再賦值的方式來控制返回值的類型:
auto getValue(){
return value;
}
this->getValue=getValue;

但是沒一會就發(fā)現(xiàn)好像沒辦法賦值。。。
難道就要止步于此了嗎?
不不不,我發(fā)現(xiàn)了這個:
template

那么到這里邏輯就很清晰了,直接做一個容器PyType,用
private:
??std::string valueType;
??void* value;
先聲明變量value
接著就可以在初始化函數(shù)里完成一系列的邏輯了,
最后在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<
標簽: