我编写的代码如下所示:
template<typename CocoaWidget>
class Widget : boost::noncopyable
{
private:
CocoaWidget* mCocoaWidget;
public:
Widget()
{
mCocoaWidget = [[CocoaWidget alloc] init];
}
// ...
};
class Button : Widget<NSButton>
{
// ...
};
但这不起作用,因为Mac Dev Center说:
Objective-C类,协议和 类别不能在一个内部声明 C ++模板
那么我现在最好做什么呢?
答案 0 :(得分:5)
你确定你不能这样做(你试过吗)?
Mac Dev Center的引用说你不能在模板中声明Objective-C 类。但是,你所做的只是在模板中声明一个指向Objective-C对象的指针 - 这是一个完全不同的东西,我没有看到为什么它不应该是允许(虽然我从未尝试过)。
答案 1 :(得分:0)
怎么了?你的代码正在运行。我的类似测试用例编译并运行时没有泄漏。
#import <Foundation/Foundation.h>
template <typename T>
class U {
protected:
T* a;
public:
U() { a = [[T alloc] init]; }
~U() { [a release]; }
};
class V : U<NSMutableString> {
public:
V(int i) : U<NSMutableString>() { [a appendFormat:@"%d = 0x%x\n", i, i]; }
void print() const { NSLog(@"%@", a); }
};
int main() {
U<NSAutoreleasePool> p;
V s(16);
s.print();
return 0;
}