如何在带有约束 (C++) 的函数中使用泛型类型

How to use generic type in function with constraint (C++)

本文关键字:函数 泛型类型 C++ 约束      更新时间:2023-10-16

我有一个算法,需要使用名为"Stack"的父类的许多实现来执行(即"LinkedStack","ArrayStack"等(。 我发现,如果我将此算法写入函数并提供某种通用类型/模板函数魔术,问题就会得到解决。

但我没有找到任何办法。

我已经搜索并尝试了许多语法,但也许这是不可能的?

template<class T: Stack> // Imaginary synthax to tell "T is a Stack"
void doTaskWithSpecificImplementation() 
{
// Eventually somewhere in the function:
T stack = new T();
}
void main() {
doTaskWithSpecificImplementation<LinkedStack>();
}

我希望这段代码能提供一种简短而简单的方法来调用函数,同时规定使用特定的虚拟类实现。

您的问题没有提到重载,而只是在获得错误的类型时给出一个可理解的错误。在这种情况下,static_assertstd::is_base_of

template<typename T>
void doTaskWithSpecificImplementation() {
static_assert(std::is_base_of<Stack, T>{}, "T must be a Stack or a Stack subclass");
}