[英]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.