Tob*_*ias 12 c++ templates type-traits c++11
我需要找出一个给定类型是否具有函数X作为具有给定参数列表的可调用函数.请在支票上不关心的返回值.然而.
我从另一个Stack Overflow问题中找到了这个解决方案似乎运行良好.它的作用是:
#include <type_traits>
template <typename C, typename F, typename = void>
struct is_call_possible : public std::false_type {};
template <typename C, typename R, typename... A>
struct is_call_possible<C, R(A...),
typename std::enable_if<
std::is_same<R, void>::value ||
std::is_convertible<decltype(
std::declval<C>().operator()(std::declval<A>()...)
), R>::value
>::type
> : public std::true_type {};
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,除了在检查中你还提供了所需的返回类型.我试图找到一种方法来修改它,以便能够检查而不考虑返回类型,但我想不出办法.
有谁知道如何做到这一点?
jro*_*rok 11
只做表达SFINAE并丢弃结果:
template <typename C, typename... Args>
struct is_call_possible {
private:
template<typename T>
static auto check(int)
-> decltype( std::declval<T>().operator()(std::declval<Args>()...),
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// overload is removed if this expression is ill-formed
std::true_type() );
template<typename>
static std::false_type check(...);
public:
static constexpr bool value = decltype(check<C>(0))::value;
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
603 次 |
最近记录: |