小编Шер*_*рей的帖子

c ++ 20 如何创建一个约束元组,如只包含允许的类型和自身实例的容器

想象一下,我想制作一个像模板容器这样的元组作为 api 接口的一部分。我想将它限制为允许的类型列表加上这个模板容器的一个实例。现在我有这样的事情:

#include <string>
#include <tuple>
#include <utility>
#include <type_traits>

template<typename T>
constexpr const bool bIsAllowedType =
    std::is_same<T, bool>::value ||
    std::is_same<T, void*>::value ||
    std::is_same<T, double>::value ||
    std::is_same<T, int64_t>::value ||
    std::is_same<T, std::string>::value;

template<typename T, typename... Args>
constexpr const bool bIsAllowedArgList =
    bIsAllowedType<std::remove_reference_t<T>> &&
    bIsAllowedArgList<Args...>;

template<typename T>
constexpr const bool bIsAllowedArgList<T> =
    bIsAllowedType<std::remove_reference_t<T>>;

template<typename... Args>
concept CAllowedArgList =
    bIsAllowedArgList<Args...>;

template<CAllowedArgList... Args>
class Container
{
private:
    using TupleT = std::tuple<std::decay_t<Args>...>;
    TupleT data;
public:
    Container() = default;
    Container(Args&&... args) : data(std::forward<Args>(args)...) {}
}; …
Run Code Online (Sandbox Code Playgroud)

c++ c++-concepts c++20

3
推荐指数
1
解决办法
92
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1