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
(例如,什么类型?)我不认为这个问题是以一个合适的欺骗目标结束的。