【发布时间】:2021-04-14 13:25:16
【问题描述】:
我想有个概念
struct creatorclass {
template<typename T>
int fct(T val)
{
return 42;
}
};
我想要的是一个在不指定模板参数的情况下检查函数 fct 是否存在的概念。那就是想要拥有
template<typename U>
concept CREATOR=requires(U val) {
val.fct;
};
我认为这是不可能的,因为需要对概念进行评估和编译。不知道类 T 就无法做到这一点。我说的对吗?
注意:Specifying a concept for a type that has a member function template using Concepts Lite 也表示这是不可能的,但这是六年前 C++20 标准之前的概念精简版。
【问题讨论】:
-
是的,这是不可能的。
-
不清楚你到底想要什么...你想验证一个泛型函数的存在(零个或多个参数;模板与否)?或者存在一个模板函数只接收一个参数(模板类型)?或者还有什么?
-
这取决于
fct成员函数的签名。要检查它是否存在,您需要知道如何调用它,或者它需要多少个参数以及这些参数是什么类型。 -
因为模板可能是专门的或受限制的,您需要更具体地了解如何调用
fct(例如,什么类型?) -
我认为这个问题没有用适当的欺骗目标结束。
标签: c++ c++20 member c++-concepts