小编Hol*_*ann的帖子

将带有派生模板的对象传递给接受带有基本模板的对象的函数

如何将具有派生模板实例化的对象传递给接受具有基本模板实例化的这些对象的方法?

似乎有可能,因为 std::shared_ptr 或 std::pair 似乎能够做到。

例如

#pragma once

#include <iostream>
#include <memory>

struct Base {
    virtual void print() = 0;
};

struct Derived : public Base {
    void print() {
        std::cout << "Got it!" << std::endl;
    }
};

void printBase(const std::shared_ptr<Base> &ptr){
    ptr->print();
}

void printBase(const std::pair<Base&, Base&> &pr){
    pr.first.print();
}

template <typename T>
struct Wrap {
    T& t;
};

void printBase(const Wrap<Base> &wrap) {
    wrap.t.print();
}

int main() {
    Derived d;
    std::shared_ptr<Derived> ptr = std::make_shared<Derived>(d);
    printBase(ptr); // works …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates parameter-passing

3
推荐指数
1
解决办法
65
查看次数

标签 统计

c++ ×1

inheritance ×1

parameter-passing ×1

templates ×1