【发布时间】:2020-05-18 00:15:36
【问题描述】:
我正在尝试创建一个concept,可用于安全检查函子是否具有特定标准。
这是我现在的代码:
template<typename T>
void fetch(T&& f)
{
fetch_helper(&f, &std::unwrap_ref_decay_t<T>::operator());
}
template<typename T, typename... Args>
void fetch_helper(T* obj, void (T::*f)(Args...) const)
{
// do stuff
}
我使用fetch 获取一个函子对象,然后使用fetch_helper 对其进行操作。但是我想实现首选项。 concept 或 type trait 将检查参数类型是否唯一(我已经为 IsUnique<T...> 实现了概念)。这样如果仿函数不符合标准,程序就不会编译。
// compiles
fetch([](int h){
});
// doesnt compile
fetch([](int h, int j){
});
如何将我的约束 IsUnique 应用于 fetch 中函子对象的参数?我尝试将 requires 概念添加到我的辅助函数中,但这仍然允许使用错误的参数调用 fetch。我必须以某种方式在 fetch 中应用参数的约束。
【问题讨论】:
标签: c++ template-meta-programming typetraits c++20 c++-concepts