相关疑难解决方法(0)

用C++反思

我一直在使用Java工作多年.在那些年里,我已经广泛(或者可能只是经常)使用反射,并发现它有用且令人愉快.但是8个月前我改变了我的工作,现在Java只是一个记忆,我正在接受C++.所以现在我想知道C++中是否有任何反射机制.我读过有关RTTI的内容,但我觉得这绝不是Java(或其他语言)反射的强大功能.我开始认为在C++中没有办法做到这一点.我错了吗?

c++ java reflection

12
推荐指数
2
解决办法
4483
查看次数

C++使用boost fusion adapt_struct迭代到嵌套的struct字段中

两个stackoverflow 答案建议使用fusion adapt_struct迭代结构字段的方法.这种方法看起来不错.但是,如何迭代到一个本身就是结构的字段?

根据之前的答案,我想出了下面的代码.问题出在代码无法编译的"#if 0"子句中.作为替代解决方案,我创建了"decode()"函数来获取指向目标参数的void指针.这有效,但在编译时丢失了类型信息.有更好的解决方案吗?

struct Foo_s { int i; };
BOOST_FUSION_ADAPT_STRUCT( Foo_s,  (int, i) )

struct Bar_s { int v; Foo_s w; };
BOOST_FUSION_ADAPT_STRUCT( Bar_s, (int, v)  (Foo_s, w) )

struct AppendToTextBox {
    template <typename T> void operator()(T& t) const {
        int status = 0;
        const char *realname = abi::__cxa_demangle(typeid(t).name(), 0, 0, &status);
        printf("  typename: %s  value: %s  realname: %s\n", typeid(t).name(),
               boost::lexical_cast<std::string>(t).c_str(), realname);
        std::string rn(realname);
        if ( rn.rfind("_s") == rn.size()-2 ) {
#if 0 /* this can …
Run Code Online (Sandbox Code Playgroud)

c++ reflection introspection boost-fusion template-meta-programming

9
推荐指数
1
解决办法
7378
查看次数

有没有办法告诉指针在C++中实际指向的类型

在C++中,您可以将指针声明为一种类型,然后将其指向另一种继承类型.有什么方法可以告诉你当前指的是哪个?

#include <typeinfo>
using namespace std;

class Foo
{
};

class Bar : public Foo
{
};

int main()
{
    Bar bar;
    Foo* foo = &bar;
    bool I_WANT_THIS_TO_BE_TRUE = (typeid(*foo) == typeid(Bar));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance pointers generic-programming

2
推荐指数
1
解决办法
106
查看次数