C++ 虚拟模板成员函数[重复]

问题描述 投票:0回答:1
#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 getDataPtr()函数,需要进行哪些更改才能使用parent(p1)对象调用getDataPtr()child1成员函数。

期望是使用parent(p1)对象调用child1模板化的getDataPtr()成员函数。

c++ templates inheritance polymorphism virtual
1个回答
0
投票

我的评论在代码中的样子:

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.