2

如果我想支持从 C++ 中的数据库查询中检索几种类型,我可以创建一个基于模板的方法定义,例如

template<typename T>
T getDBValue(int col){
    throw "not implemented";
}

template<>
int getDBValue<int>(int col){
    return 43;
}

template<>
char* getDBValue<char*>(int col){
    return "foo";
}

我知道在objective-c中没有真正的模板对应物,那么你会用什么来支持很少的返回值而不是像这样实现呢

- (type1) getType1FromCol: (int) col;
- (type2) getType2FromCol: (int) col;
- (type3) getType3FromCol: (int) col;

提前致谢!

4

2 回答 2

2

实际上只有两个选项,具体取决于用户更方便的选择:

  • 按照你的建议做,给不同的方法起不同的名字
  • 只使用一种方法来返回适合该项目的任何类型(基本上将所有单一类型的方法合并为一个,返回一个泛型类型,例如 NSObject* 甚至 id)。显然只适用于“真实”对象返回类型,并且基本上要求调用者要么知道正确的结果类型,要么从结果中查询它
于 2012-08-29T07:54:59.050 回答
2

如果你想混合使用这两种语言,或者你发现一种语言更适合特定任务,你总是可以使用 Objective-C++。通常,您可以通过将文件扩展名更改为.mm.

对于 ObjC 接口,您可以考虑这样一个简单的包装器接口,它使用您现有的程序:

template<typename T>
T getDBValue(int col); // << not defined

template<>
int getDBValue<int>(int col){
    return 43;
}

template<>
const char* getDBValue<const char*>(int col){
    return "foo";
}

你可以这样处理它:

@implementation MONDBEntry
{
    int col;
}
...

- (int)intValue
{
    return getDBValue<int>(self.col);
}

- (NSString *)stringValue
{
    return [NSString stringWithUTF8String:getDBValue<const char*>(self.col)];
}
...
于 2012-08-29T08:01:54.710 回答