c++ 指定方法的引用参数的概念

nfeuvbwi  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(101)

下列程式码不会编译:

struct FooImpl {
   using Bar = int;
   void method(Bar&) {}
 };
 
 template <typename F>
 concept Foo = requires(F f) {
   { f.method(typename F::Bar{}) };
 };
 
 static_assert(Foo<FooImpl>);

此问题来自FooImple::method()声明中的&。删除&可修复此问题。
我不想修改FooImpl,而想修改Foo。我如何修改概念实现以满足static_assert

qni6mghb

qni6mghb1#

如果此概念的目的是查看F是否有一个名为method的成员函数,该函数可以接受F::Bar类型的左值,则您要编写的内容是:

template <typename F>
concept Foo = requires (F f, typename F::Bar arg) {
    f.method(arg);
};

如果也没有typename F::Bar(即Foo<int>false,而不是格式错误),则此操作将正常失败。

相关问题