结合可变参数模板概念

问题描述 投票:0回答:1

我正在尝试将在单个模板类上定义的概念应用于多个模板类,我这样做了:

template<template<class> class F, class T, class... Ts>
    requires F<T>::value
struct check_concept
{
    constexpr bool value = check_concept<F, Ts...>::value;
};

template<template<class> class F, class T>
    requires F<T>::value
struct check_concept<F, T>
{
    constexpr bool value = true;
};

我收到一条错误消息:

'check_concept<F,T,>::value' cannot be declared with 'constexpr' specifier

我想做这样的事情:

template<class... Ts>
    requires check_concept<std::is_arithmetic, Ts...>::value;
class A
{
    //Implementation Details
}

我每次都尝试从

check_concept<template<class> class F, class... Ts>
继承,但仍然失败。

c++ metaprogramming c++-concepts
1个回答
0
投票

@Ted Lyngmo 提出了以下可行的答案(在

static
之前添加
constexpr
):

template<template<class> class F, class T, class... Ts>
    requires F<T>::value
struct check_concept
{
    static constexpr bool value = check_concept<F, Ts...>::value;
};

template<template<class> class F, class T>
    requires F<T>::value
struct check_concept<F, T>
{
    static constexpr bool value = true;
};

然后这有效:

constexpr bool v = check_concept<std::is_arithmetic, double, int>::value; //true
© www.soinside.com 2019 - 2024. All rights reserved.