gpt4 book ai didi

C#-like 泛型,C++ 中的模板类型约束

转载 作者:行者123 更新时间:2023-12-05 09:04:54 32 4
gpt4 key购买 nike

我有一段C#代码如下:

class Foo<T> where T : TClass
{
// body
}

是否有任何标准方法可以在 C++ 中实现泛型类型约束

最佳答案

C++ 有 std::is_base_of ,可与 SFINAE(C++17 及更早版本)或要求 (C++20) 一起使用。 C++20 还添加了概念 std::derived_from .

C++17:

#include <type_traits>
#include <cstddef>

template<class T, std::enable_if_t<std::is_base_of_v<TClass, T>, std::nullptr_t> = nullptr>
class Foo
{
// Body
};

C++20:

#include <type_traits>

template<class T> requires std::is_base_of_v<TClass, T>
class Foo
{
// Body
};

C++14 和 C++11 支持非常相似的行为,但语法不够简洁,例如替换 std::is_base_of_v<TClass, T>std::is_base_of<TClass, T>::value .

关于C#-like 泛型,C++ 中的模板类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67959584/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com