提问人:rasa911216 提问时间:4/9/2023 更新时间:4/9/2023 访问量:43
如何在 C++ 中从继承的类模板中提取数据
How to extract data from an inherited class template in C++
问:
我正在编写一个类对象向量,每个类对象都包含一个 C++ 中的 Template 变量,以便它允许我处理不同类型的数据。
我正在使用以下代码:
#include <iostream>
#include <memory>
//Declare Vector library to work with vector objects.
#include <vector>
#include <string>
using namespace std;
class AItem{
};
template <class OBJ>
//Object that will hold template data.
class Item : public AItem {
public:
//Variable to store the values. TODO: Verify if this can be made into a TEMPLATE to accept any value.
OBJ value;
//Constructor to store values.
Item(OBJ _value): value(_value){}
~Item(){
cout << "Deleting " << value << "\n";
}
};
//Main Thread.
int main(){
//##################################################
//##################################################
// TEST SECTION
//Create new Items.
Item<string> *itObj = new Item<string>("TEST");
//Create a Vector that stores objects.
vector <shared_ptr<AItem>> v1;
//Store each item in the Array.
v1.push_back(shared_ptr<AItem>(itObj));
//cout<<&v1.getValue()<<"\n";
//Iterate through each one and retrieve the value to be printed.
//TODO: FIX THIS
for(auto & item: v1){
cout<<item<<'\n';
}
//##################################################
//##################################################
cout<<"Cpp Self Organizing Search Algorithm complete.\n";
return 0;
}
并且我想检索插入的值,但是每当我迭代是否使用指针或访问数据时,我只会得到一个内存地址,或者我被告知类 AItem 没有属性值。在 C++ 中访问嵌套类中的变量的正确方法是什么?
答:
1赞
clove682
4/9/2023
#1
也许是因为你没有在父类中定义一些虚函数,就像这样?
struct AItem {
virtual void a() { printf("AItem::a()\n"); }
virtual void b() { printf("AItem::b()\n"); }
};
template <class OBJ> struct Item : public AItem {
public:
OBJ value;
Item(OBJ _value) : value(_value) {}
void a() override { printf("Item::a()\n"); }
void b() override { printf("Item::b()\n"); }
~Item() { std::cout << "Deleting " << value << "\n"; }
};
/* Use it like below
for (auto &item : v1) {
item->a();
item->b();
}
*/
评论
0赞
rasa911216
4/10/2023
多谢!刚刚对其进行了测试并进行了轻微的修改以访问这些值。因此,我似乎需要更多地研究虚拟继承、结构和函数。再次感谢!
评论