我希望能够内省一个C++类的名称,内容(即成员及其类型)等.我在这里说的是原生C++,而不是托管C++,它有反射.我意识到C++使用RTTI提供一些有限的信息.哪些额外的库(或其他技术)可以提供此信息?
因此,使用SFINAE和c ++ 11,可以根据是否可以替换其中一个模板参数来实现两个不同的模板函数.
例如
struct Boo{
void saySomething(){ cout << "Boo!" << endl; }
};
template<class X>
void makeitdosomething(decltype(&X::saySomething), X x){
x.saySomething();
}
template<class X>
void makeitsaysomething(int whatever, X x){
cout << "It can't say anything!" << endl;
}
int main(){
makeitsaysomething(3);
makeitsaysomething(Boo());
}
Run Code Online (Sandbox Code Playgroud)
或者那条线上的东西.
我的问题是..如何做同样的事情,但对于非成员函数?
特别是我试图检查是否有这样的事情:
operator<<(std::ostream& os, X& whateverclass);
Run Code Online (Sandbox Code Playgroud)
那是存在的.有可能测试吗?
编辑:问题不同于:是否可以编写模板来检查函数的存在?因为我试图看一个函数是否存在,而不是一个方法