我想进行单元测试以检查(并学习函数解析的原理),对于某些数学函数中采用左值而不是原始类型的const左值引用的函数重载,正在调用好函数。我没有发现任何通常的模式。
struct A {/* ... */};
A f(A) {} // #1
A&& f(A&&) {} // #2
// Or some very complicated template overloading
int main() {
f(A()); // call #2 ; How to get it ?
}
// I want to have:
// typeid(f).name();
是否可以在编译时从typeid(f)
获得context
? (例如gcc的抱怨)
“伪代码”:
std::cout << typeid(f with args A()).name() << std::endl
// >> "A&& f(A&&)" (#2)
只有typeid(f)
是编译器(在Ubuntu x64上为gcc 7.3.0)
/home/xyzz/project/tests/RunTests.cpp:22: erreur : overloaded function with no contextual type information
typeid(tst).name();
^~~
使用typeid(f())
,它实际上返回返回类型类型
建议答案:std::result_of
。模板参数不是重建的,但是我们可以获取函数类型。
答案 0 :(得分:0)
以下内容似乎可以在我的计算机上使用。它与您想要的距离有多近?
List<string> list = xmlDoc.Root.Elements("green_apple").Elements()
.Select(element => element.Value.Trim())
.ToList();