如何定义指向模板类型的指针

Irb*_*bis 1 c++ c++17

我有以下结构:

template <typename T>
struct A
{
    T t;
};
Run Code Online (Sandbox Code Playgroud)

在另一个结构中,我想定义一个指向结构 A 的指针:

struct B
{
    //A* a;
};
Run Code Online (Sandbox Code Playgroud)

类型 A 的对象的特定类型将在对象 A 创建期间已知。如何在 struct B 中定义指向模板类型的指针?

Ted*_*gmo 6

如何定义指向模板类型的指针?

类模板不是类型,因此您不能拥有指向它们的指针。您需要实例化类模板,以便根据该模板获取一个类,然后您可以创建指向该类实例的指针。

例子:

template<class T>
struct B
{
    A<T>* a;
};
Run Code Online (Sandbox Code Playgroud)

这里B<int>将保存一个指向 的指针A<int>。不相关的类B<double>将保存一个指向A<double>etc 的指针。


另一种方法是将指针存储在 a 中std::any,并在需要时进行强制转换:

#include <any>

template <typename T>
struct A {
    T t;
};

struct B {
    template<class T>
    void store(A<T>& o) {
        a = &o;
    }

    template<class T>
    A<T>& get() {
        return *std::any_cast<A<T>*>(a);
    }

    std::any a;
};

int main() {
    B b;
    
    A<int> ai;
    
    b.store(ai);

    auto& aref = b.get<int>();
}
Run Code Online (Sandbox Code Playgroud)