繁体   English   中英

如何在包含 static constexpr 的类型的概念的要求中指定返回类型?

[英]how to specify the return type in a requirement for a concept for types that contains a static constexpr?

这个问题与以下描述的问题非常相似: C++ 概念:要求 static 变量出现在策略 class中,但该解决方案对我不起作用。 我的例子如下:

#include <iostream>
template<typename T1>
concept AConcept = requires(T1 a)
{
    // { a.typef }; // without requiring the return type it works.
    { a.typef } -> std::same_as<char>; // not working with char& either.
};

struct Aclass{
    static constexpr char typef='c';
    char getVal(){ return typef; };
};

char getVal( AConcept auto kk ){
    return kk.getVal();
};

int main(){
    Aclass u;
    char c = getVal( u );
    std::cout << c << std::endl;
    return 0;
};

由于不满足概念要求,编译失败。 (g++ 11.2.0,用g++ -std=c++20 kk.cpp -o kk编译)

先感谢您,

你可以写:

#include <iostream>
#include <type_traits>


template<typename T1>
concept AConcept = std::is_same_v<decltype(std::declval<T1>().typef ), const char>;

struct Aclass{
    static constexpr char typef ='c';

    char getVal(){ return typef; };
};

char getVal( AConcept auto kk ){
    return kk.getVal();
};

int main(){
    Aclass u;
    char c = getVal( u );
    std::cout << c << std::endl;
    return 0;
};

或者,如果您不关心左值引用,您可以这样定义概念:

template<typename T1>
concept AConcept = requires(T1 a)
{
    { a.typef } -> std::same_as<const char&>;
};

看看https://en.cppreference.com/w/cpp/language/requires

字段访问表达式的类型是const char& - 它与decltype((expression))相同。

看看: https://en.cppreference.com/w/cpp/language/decltype这里的重要部分是实体周围的() ,这使它成为一个表达式......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM