模板类型的链接列表,下一个指针是不同的专业化

问题描述 投票:0回答:1

我希望有一个带有单个类型参数的类模板,并且在类内部保存一个指向链表中下一个类的指针,但允许该类可能具有不同的类型(在本例中为不同的类型)是一个专业。)

我尝试了这段代码:

template<typename T, typename U>
class Banana
{
    public:
        void function(T parameter); // illustrates class methods/members only concerned with single type T

        Banana<V>* next;
}

编译器给出错误:

'Banana':模板参数太少。

c++ templates linked-list
1个回答
0
投票

我猜你想静态地执行此操作。一种方法是指定继承顺序。在下面的示例中,我编写了类型,但是如果您的继承顺序中有循环,这显然不起作用。在这种情况下,请使用

std::unique_ptr
代替。

template <typename V>
struct SuccessorMaker { using type = V; };

template <typename> struct Successor : SuccessorMaker<void> {}; // end
// specify succession order here
template <> struct Successor<int> : SuccessorMaker<float> {};
template <> struct Successor<float> : SuccessorMaker<short> {};

template <typename T>
struct Banana {
  void function(T);
  Banana<typename Successor<T>::type> next;
};
template <> struct Banana<void> {}; // end of list

int main() {
    Banana<int> banana;
    banana.function(1);
    banana.next.function(2.f);
}

演示

当然,您也可以通过拥有一个公共基类来使用多态性来做到这一点。这只是一个常规列表。

© www.soinside.com 2019 - 2024. All rights reserved.