我的程序需要使用void*来在动态调用情况下传输数据或对象,以便它可以引用任意类型的数据,甚至是原始类型.但是,我最近发现,在具有多个基类的类的情况下向下转换这些void*的过程失败,甚至在调用这些向下转换指针上的方法后崩溃我的程序,即使内存地址似乎是正确的.在访问"vtable"期间发生崩溃.
所以我创建了一个小测试用例,环境是Mac OS X上的gcc 4.2:
class Shape {
public:
virtual int w() = 0;
virtual int h() = 0;
};
class Square : public Shape {
public:
int l;
int w() {return l;}
int h() {return l;}
};
class Decorated {
public:
int padding;
int w() {return 2*padding;}
int h() {return 2*padding;}
};
class DecoratedSquare : public Square, public Decorated {
public:
int w() {return Square::w() + Decorated::w();}
int h() {return Square::h() + Decorated::h();}
};
#include <iostream>
template <class T> …Run Code Online (Sandbox Code Playgroud) 我能做些什么来完成这项工作:
template<class C, class V, Test V::*>
class Test {
};
Run Code Online (Sandbox Code Playgroud)
它给了我编译器错误:
unknown type name 'Test'
Run Code Online (Sandbox Code Playgroud)
它现在是一个自引用模板,似乎不可能.有什么办法可以让它发挥作用?
编辑:
这就是我需要的东西.我想用最少的编码工作来实现双向(思考父子)关系模式.
template <class O, class T, Reference<T, O, Reference O::*> T::* opposite>
class Reference
{
T **data;
int count;
public:
Reference(): data(new T*[N]), count(0) {}
~Reference() {delete[] data;}
Reference &add(T *t) {
handleOtherSide();
return link(t);
}
// a lot of stuff to implement this
};
Run Code Online (Sandbox Code Playgroud)
那是集合类.以下是它的使用方法:
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> …Run Code Online (Sandbox Code Playgroud) 是否可以在Java中实现多线程类加载器?在元驱动的框架中,我需要提前加载数百个类,即不像系统类加载器那样懒散.为了加速这一点,我想更好地利用当前的多核CPU.在我深入研究之前,如果有人已经在这个问题上有一些经验或者可能完全清楚可能defineClass()是这种情况下的瓶颈,我会感兴趣.
谢谢安德烈
我非常喜欢代码生成(来自UML)并且来自Java世界,我想知道如何在Objective-C中实现自动双向关联管理.
图像协会合作伙伴< - >地址,一对多,可从两端导航.我想要实现的是,如果我向合作伙伴附加地址,地址对象应该自动了解其合作伙伴.
所以实现模式是在Partner端有一个NSMutableArray*,在Address端有一个Partner*.地址侧的属性很容易实现,因为setPartner :( Partner*)aPartner可以自动将地址(self)插入到合作伙伴的管理地址的NSMutableArray中.然而,另一方面并不那么容易实施.Objective-C中to-many引用的标准实现模式似乎是通过@property的get方法可获得的NSMutableArray.拥有此NSMutableArray的对象然后可以将Address对象插入到数组中,这当然不会更新另一方.
我知道这种关联管理还有其他模式,例如,通过addTo ...()和removeFrom ...()方法.但我还不知道这是否符合Cocoa编程的其他原则,甚至阻止我有效地使用Cocoa.我在这里考虑Interface Builder.没有多少经验,但我看到了一个名为ArrayController的东西,它看起来非常方便,但似乎也期望使用NSMutableArray类型属性.如果这个人将对象插入到数组中,我需要拦截它并进行另一侧调整.
作为一名Java程序员,我现在倾向于子类化NSMutableArray并覆盖它的一些方法,然后可以操纵另一端.这有可能吗?我读到了类别,但到目前为止,我已经明白我只能通过这种方式向类中添加方法,而不是覆盖它们,也不会添加到它的结构中.或者它应该是方法转发?我现在很困惑.如果你能指出我正确的思考方向,那就太棒了.非常感谢!
c++ ×2
associations ×1
casting ×1
classloader ×1
cocoa ×1
gcc ×1
java ×1
objective-c ×1
templates ×1