是否有一种简单的方法来推断成员函数的“类型”?我想推断出以下(成员)函数的类型:
struct Sample {
void func(int x) { ... }
};
void func(int x) { ... }
以下类型(将在std::function
中使用):
void(int)
我正在寻找一个支持变量计数(而不是varargs!)的解决方案......
编辑 - 示例:
我正在寻找类似于decltype
的表达式 - 让我们称之为functiontype
- 具有以下语义:
functiontype(Sample::func) <=> functiontype(::func) <=> void(int)
functiontype(expr)
应评估为与std::function
兼容的类型。
答案 0 :(得分:3)
这有帮助吗?
#include <type_traits>
#include <functional>
using namespace std;
struct A
{
void f(double) { }
};
void f(double) { }
template<typename T>
struct function_type { };
template<typename T, typename R, typename... Args>
struct function_type<R (T::*)(Args...)>
{
typedef function<R(Args...)> type;
};
template<typename R, typename... Args>
struct function_type<R(*)(Args...)>
{
typedef function<R(Args...)> type;
};
int main()
{
static_assert(
is_same<
function_type<decltype(&A::f)>::type,
function<void(double)>
>::value,
"Error"
);
static_assert(
is_same<
function_type<decltype(&f)>::type,
function<void(double)>
>::value,
"Error"
);
}