Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;20_C++_C++20_Member_C++ Concepts - Fatal编程技术网

C++ 在C++;20

C++ 在C++;20,c++,c++20,member,c++-concepts,C++,C++20,Member,C++ Concepts,我想要一个概念的 struct creatorclass { template<typename T> int fct(T val) { return 42; } }; struct creatorclass{ 模板 整数fct(T val) { 返回42; } }; 我想要的是一个在不指定模板参数的情况下检查函数fct是否存在的概念。那是我想要的 template<typename U> concept CREATOR=requires(U

我想要一个概念的

struct creatorclass {
  template<typename T>
  int fct(T val)
  {
    return 42;
  }
};
struct creatorclass{
模板
整数fct(T val)
{
返回42;
}
};
我想要的是一个在不指定模板参数的情况下检查函数fct是否存在的概念。那是我想要的

template<typename U>
concept CREATOR=requires(U val) {
  val.fct;
};
模板
概念创建者=需要(U值){
val.fct;
};
我认为这是不可能的,因为一个概念需要评估和编译。如果不知道类T,则无法执行此操作。我说得对吗


注意:还说这是不可能的,但这是六年前C++20标准之前的概念lite。

据我所知,不评估任何模板参数就不可能测试模板成员函数

这就是说,如果您知道允许输入的分类是什么——例如,如果一个函数只能用整数值或类似的东西进行求值——那么您可以使用显式实例化对其进行测试,无论您的目的是什么,它都可能“足够好”:

模板
概念创建者=需要(U值){
//检查“val”是否具有可用于整数的“fct”函数模板
价值模板fct(5);
};

然而,在大多数情况下,围绕完成契约所需的完整原子定义来定义一个概念通常更为有用——在这一点上,通常最好将此评估也放在
模板
参数中:

模板
概念fnc_evaluable=需要(T值,U英寸){
val.template fct(in);
};
然后在更大的构图中使用这个

此时,作为模板的
fnc
的状态也变得不如具有成员函数调用
fct
的状态重要,该成员函数调用可由
U
调用,并且可以简化为:

模板
概念fnc_evaluable=需要(T值,U英寸){
val.fct(in);
};

据我所知,不评估任何模板参数就无法测试模板成员函数

这就是说,如果您知道允许输入的分类是什么——例如,如果一个函数只能用整数值或类似的东西进行求值——那么您可以使用显式实例化对其进行测试,无论您的目的是什么,它都可能“足够好”:

模板
概念创建者=需要(U值){
//检查“val”是否具有可用于整数的“fct”函数模板
价值模板fct(5);
};

然而,在大多数情况下,围绕完成契约所需的完整原子定义来定义一个概念通常更为有用——在这一点上,通常最好将此评估也放在
模板
参数中:

模板
概念fnc_evaluable=需要(T值,U英寸){
val.template fct(in);
};
然后在更大的构图中使用这个

此时,作为模板的
fnc
的状态也变得不如具有成员函数调用
fct
的状态重要,该成员函数调用可由
U
调用,并且可以简化为:

模板
概念fnc_evaluable=需要(T值,U英寸){
val.fct(in);
};

是的,这是不可能的。不清楚您到底想要什么。。。是否要验证泛型函数(零个或多个参数;是否为模板)的存在?或者存在只接收一个参数(模板类型)的模板函数?或者什么?这取决于
fct
成员函数的签名。要检查它是否存在,您需要知道如何调用它,或者它需要多少个参数以及这些参数是什么类型。因为模板可能是专用的或受限制的,所以您需要更具体地了解如何调用
fct
(例如,什么类型?)我不认为这个问题是以一个合适的欺骗目标结束的。是的,这是不可能的。不清楚你到底想要什么。。。是否要验证泛型函数(零个或多个参数;是否为模板)的存在?或者存在只接收一个参数(模板类型)的模板函数?或者什么?这取决于
fct
成员函数的签名。要检查它是否存在,您需要知道如何调用它,或者它需要多少个参数以及这些参数是什么类型。因为模板可能是专用的或受限制的,所以您需要更具体地了解如何调用
fct
(例如,什么类型?)我不认为这个问题是以一个合适的欺骗目标结束的。