如何从调用表达式中获取函数的类型?

时间:2019-02-10 22:47:30

标签: c++ c++11

我想进行单元测试以检查(并学习函数解析的原理),对于某些数学函数中采用左值而不是原始类型的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。模板参数不是重建的,但是我们可以获取函数类型。

1 个答案:

答案 0 :(得分:0)

以下内容似乎可以在我的计算机上使用。它与您想要的距离有多近?

List<string> list = xmlDoc.Root.Elements("green_apple").Elements()
                .Select(element => element.Value.Trim())
                .ToList();