我希望有一个带有单个类型参数的类模板,并且在类内部保存一个指向链表中下一个类的指针,但允许该类可能具有不同的类型(在本例中为不同的类型)是一个专业。)
我尝试了这段代码:
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':模板参数太少。
我猜你想静态地执行此操作。一种方法是指定继承顺序。在下面的示例中,我编写了类型,但是如果您的继承顺序中有循环,这显然不起作用。在这种情况下,请使用
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);
}
(演示)
当然,您也可以通过拥有一个公共基类来使用多态性来做到这一点。这只是一个常规列表。