【发布时间】:2021-05-03 12:59:12
【问题描述】:
我正在学习 C++ 概念,但遇到了一个令人讨厌的问题:
我不知道如何区分成员变量是int 类型的变量和成员变量是int&。
原因是我正在使用的检查使用 instance.member 语法,并且在 C++ 中返回引用。
完整示例:
#include <iostream>
#include <concepts>
template<typename T>
void print(T t) {
std::cout << "generic" << std::endl;
}
template<typename T>
requires requires(T t){
{t.val} -> std::same_as<int&>;
}
void print(T t) {
std::cout << "special" << std::endl;
}
struct S1{
int bla;
};
struct S2{
int val = 47;
};
int x = 47;
struct S3{
int& val=x;
};
int main()
{
print(4.7);
print(S1{});
print(S2{});
print(S3{});
}
我希望print(S3{}) 将由通用案例处理,而不是特殊案例。
请注意,将我的 requires 内容更改为:
{t.val} -> std::same_as<int>;
使S2 与模板不匹配,因此不起作用(就像我说的那样,我认为 C++ 中的成员访问返回一个引用)。
有没有办法解决这个问题?
【问题讨论】:
标签: c++ c++20 c++-concepts