Dmi*_*gin 31 c++ decltype c++11
我想要这样的东西:
std::tuple<int, bool, double> MyFunction_1 (void);
void MyFunction_2 (decltype (MyFunction_1) ¶ms);
Run Code Online (Sandbox Code Playgroud)
显然,在这个例子中,将传递一个代码指向函数的指针.
我想要相当于这个:
void MyFunction_2 (std::tuple<int, bool, double> ¶ms);
Run Code Online (Sandbox Code Playgroud)
有可能这样做吗?
son*_*yao 35
decltype (MyFunction_1)会给你类型MyFunction_1(即函数类型std::tuple<int, bool, double> ()),你需要模拟一个函数调用 1(通过添加())来获得返回类型(即std::tuple<int, bool, double>),例如
void MyFunction_2 (decltype (MyFunction_1()) ¶ms);
// ^^
Run Code Online (Sandbox Code Playgroud)
1表达式在编译时计算,实际上不会在运行时调用该函数.
Bat*_*eba 16
该类型的MyFunction_1不是std::tuple<int, bool, double>-非正式你可以把它看成是一个函数指针.事实上,&MyFunction_1 衰退本身,当然是一个指针.
所以decltype(MyFunction_1)不是你想要的.
解决方案是写decltype(MyFunction_1()).该类型的MyFunction_1() 是 std::tuple<int, bool, double>.请注意,这实际上并不调用该函数; sizeof在这方面它很像.