目前我能想到的最佳方法是使用static_assert,但我希望使用更好的方法。
#include <set>
#include <forward_list>
using namespace std;
template<typename C>
concept bool SizedContainer = requires (C c){
c.begin();
c.end();
{c.size()} -> size_t;
};
static_assert(SizedContainer<std::set<int>>);
static_assert(!SizedContainer<std::forward_list<int>>);
static_assert(!SizedContainer<float>);
class MyContainer{
public:
void begin(){};
void end(){};
size_t size(){return 42;};
};
static_assert(SizedContainer<MyContainer>);
int main()
{
}
最佳答案
目前没有,您要寻找的关键字是requires
从cppreference
由于您不处理函数声明,因此这是无关紧要的。
第二种情况是
在这里再次无关紧要,因为您没有尝试验证某些模板参数的约束