
我找不到类似的,惯用的C方式存储“任何类型的对象”.在C中我会使用一个voID指针;相同的事情对于C来说很明显,但是当我构造一个std :: string的实例时,我遇到了问题,并尝试将它存储到列表/树中(关于一个无效的cast从std :: string& to voID * ).有没有这样的方式? C是否具有Java对象(或Objective-C的NSObject)?
奖金问题:如果没有,并且我需要继续使用voID指针,将std :: string存储到voID *中的“正确”方式是什么?我偶然发现static_cast< char *>(str.c_str()),但是对于我想要做的事情似乎有些冗长.有没有更好的办法?
解决方法 与Java不同,C没有所有对象继承的基础对象.您想要做的通常方法是使用 templates.标准C库中的所有容器都使用此方法.与Java不同,C不依赖于多态/继承来实现通用容器.在Java中,所有对象都从Object继承,所以任何类都可以插入到一个容纳Object的容器中.然而,C模板是编译时间结构,指示编译器为您使用的每种类型实际生成不同的类.所以,例如,如果你有:
template <typename T>class MyContainer { ... }; 然后,您可以创建一个接受std :: string对象的MyContainer,另一个使用int的MyContainer.
MyContainer<std::string> stringContainer;stringContainer.insert("Blah");MyContainer<int> intContainer;intContainer.insert(3342); 总结 以上是内存溢出为你收集整理的保持对C中任何对象类型的引用?全部内容,希望文章能够帮你解决保持对C中任何对象类型的引用?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)