我想知道一个类型是否定义了一个带有模板参数的成员函数,但模板参数受 SFINAE 约束。
示例我有一个A
具有单个功能的类型foo
struct A{
template<typename T>
std::enable_if<Condition<T>,ReturnType> foo(T t){ ... }
};
Condition
是一些条件,例如std::is_pos_v
现在我boost::hana::is_valid
用来确定一个类型是否有一个类似的成员函数foo()
,foo(int)
但是当使用模板参数时我迷路了。
我想写这样的东西
auto has_foo = hana::is_valid([](auto t) -> delctype(hana::traits::declval(t).foo(???)){});
has_foo(hana::type_c<A>); // <-- I want this to return true
问题是我应该放什么而不是???
?
编译器可能不可能“证明”一个类型A
满足:“对于每个T
满足的类型Condition
都有一个成员函数A::foo(T)
”
所以为了让编译器更容易,我很乐意至少“证明”一个类型A
成立:“有一个类型T
,所以有一个成员函数A::foo(T)
”
不幸的是,这在我的示例中仍然很难,因为这需要证明存在满足Condition
.
因此,出于自省的目的,是否有可能忽略 SFINE?然后我可以选择任意类型并测试 eg 的存在A::foo(int)
。