如何在带有约束 (C++) 的函数中使用泛型类型
How to use generic type in function with constraint (C++)
我有一个算法,需要使用名为"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_assert
std::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");
}
相关文章:
- 使用泛型类型推送到堆栈时出现问题
- 如何在容器中指定模板化别名的泛型类型
- 具有模板专用化的泛型类型转换
- C++存储泛型 T 类型类的向量
- 如何在C++中返回没有模板的泛型类型?
- 如何在带有约束 (C++) 的函数中使用泛型类型
- 模板函数重载(泛型类型与模板模板类型)选择正确的重载
- 泛型类型别名,它们彼此不兼容
- 获取模板函数/泛型 lambda 的唯一返回类型
- 泛型类型转换
- 重载泛型类型的模板类时检查运算符=时的自赋值
- 在C++中,如何根据类中的参数返回不同的泛型类型
- 使用泛型类型显式实例化函数模板
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 从函数中存储和返回泛型类型(甚至为空)
- 重载泛型类型的函数与给定类型及其子级的函数
- 专门化泛型类型的函数组
- 如何在参数为泛型类型的模板类中为方法类型化定义函数签名
- 如何编写一个可以以类型安全的方式迭代泛型类型的函数
- 如何编写一个可以迭代泛型类型的函数