【发布时间】:2022-01-15 22:27:01
【问题描述】:
因此,我正在尝试创建一个概念来检查结构/类中是否包含模板方法 void func(auto)。
struct S
{
void func(auto param)
{
// Do stuff ...
}
};
Struct S 没有任何模板参数,但它的成员有。我将模板参数传递给概念“typename _Param”,但在使用概念时需要指定此参数。
template <typename _T, typename _Param>
concept MyConcept = requires(_T&& obj, _Param&& param)
{
{obj.func(param)};
};
// I don't want to specify 'int', it doesn't guarantee that S::func would be instantiated with this parameter.
void workWithObject(MyConcept<int> auto&& obj);
int main()
{
S s;
workWithObject(s);
return 0;
}
是否可以在不指定具体类型的方法参数的情况下使用 MyConcept?
【问题讨论】:
-
"如果结构/类中有模板方法" 你为什么要关心函数是否是模板?
-
不要使用以下划线开头的标识符,然后是大写字母。这些是为实现保留的。
-
没有示例
workWithObject做了什么以及为什么它需要这个要求,很难判断您解决问题的尝试是否正确。这是一个来自XY problem 的问题示例。我认为只有当你有带有模板参数的模板时,这可能会有一个降神会,但workWithObject声明并不表示这种情况。 -
@aschepler,感谢您的提示!
-
您可以测试
obj.func(expr)是否对expr的任意数量的特定类型有效,但我认为不适用于所有可能的类型。如果您使用私有类型,您可以知道至少涉及一个模板,但这并不排除一个函数被限制为允许除某些类型之外的所有类型。
标签: c++ templates c++20 c++-concepts member-functions