#include <iostream>
class Data_X {
public:
Data_X(int x): x(x) {}
int getData() {
return x;
}
private:
int x;
};
class parent {
public:
template <typename T>
T* getDataPtr() { //**can't make virtual here**
std::cout << "No get DataPtr not implemented" << std::endl;
return nullptr;
}
};
class child1 : public parent {
public:
child1(int x) {
datax = new Data_X(x);
}
template <typename T>
T* getDataPtr() {
return datax;
}
private:
Data_X *datax;
};
int main() {
std::unique_ptr<parent> p1 = std::make_unique<child1>(1);
Data_X* dataPtr = p1->getDataPtr<Data_X>();
dataPtr->getData();
return 0;
}
Data_X* dataPtr = p1->getDataPtr
期望是使用parent(p1)对象调用child1模板化的getDataPtr()成员函数。
我的评论在代码中的样子:
#include <iostream>
#include <memory>
#include <string>
class some_interface
{
public:
virtual ~some_interface() = default;
virtual void do_something_with_data() = 0;
};
template<typename type_t>
class some_class_t final :
public some_interface
{
public:
explicit some_class_t(const type_t& data) :
m_data{data}
{
}
void do_something_with_data() override
{
std::cout << m_data << "\n";
}
private:
type_t m_data;
};
int main()
{
std::unique_ptr<some_interface> int_object = std::make_unique<some_class_t<int>>(42);
std::unique_ptr<some_interface> string_object = std::make_unique<some_class_t<std::string>>("Hello");
int_object->do_something_with_data();
string_object->do_something_with_data();
return 1;
}