我想要这样的东西:
std::tuple<int, bool, double> MyFunction_1 (void);
void MyFunction_2 (decltype (MyFunction_1) ¶ms);
很显然,在此示例中,将传递指向函数的代码指针。
我想拥有这样的东西:
void MyFunction_2 (std::tuple<int, bool, double> ¶ms);
有可能这样做吗?
答案 0 :(得分:35)
decltype (MyFunction_1)
将为您提供MyFunction_1
的类型(即函数类型std::tuple<int, bool, double> ()
),您需要模拟一个函数调用 1 < / sup>(通过添加()
)来获取返回类型(即std::tuple<int, bool, double>
),例如
void MyFunction_2 (decltype (MyFunction_1()) ¶ms);
// ^^
1 该表达式在编译时求值,实际上不会在运行时调用该函数。
答案 1 :(得分:16)
MyFunction_1
的类型不是std::tuple<int, bool, double>
-非正式地,您可以将其视为函数指针。实际上,&MyFunction_1
会自身衰变,并且一定是指针。
所以decltype(MyFunction_1)
不是您想要的。
解决方案是编写decltype(MyFunction_1())
。 MyFunction_1()
的类型是 std::tuple<int, bool, double>
。请注意,这实际上并不是调用该函数;在这方面就像sizeof
。
答案 2 :(得分:3)
using RetType = std::invoke_result<decltype(f)>::type;