假设我有一个对象。可能是一个客观的C对象;可能是一个C++对象。有没有一种方法来测试它不会抛出任何异常?cocoa touch - 测试对象是否是客观的C对象
编辑:我很高兴地使用任何工程构造,包括模板,如果他们会做这项工作。
假设我有一个对象。可能是一个客观的C对象;可能是一个C++对象。有没有一种方法来测试它不会抛出任何异常?cocoa touch - 测试对象是否是客观的C对象
编辑:我很高兴地使用任何工程构造,包括模板,如果他们会做这项工作。
既然你可以使用模板,你可以做一些事情来创建一些类型的函数,它需要一个通用的模板参数,然后使用C++使用的所有类实例化你的基类。如果它不是C++类,那么函数返回false。因此,例如:
//...in some header file
template<typename T>
bool is_cplusplus(const T* type) { return false; }
#define IS_CPLUSPLUS_T(class) \
template<> \
inline bool is_cplusplus(const class* type) { return true; }
//...now use the macro to declare all your C++ classes as "true" in the return
//from is_cplusplus()
IS_CPLUSPLUS_T(my_class1)
IS_CPLUSPLUS_T(my_class2)
//...now use in some code in a separate .cpp file or .mm file, etc.
my_class1 a_class;
if (is_cplusplus(&a_class))
{
//do something
}
我专门使用指针而不是在这里引用,因为这是我的理解是,你可以实例化一个C++模板,一个指向Objective-C的对象,其中,与Objective-C的实例对象本身不起作用。如果这种假设不正确,那么通过将指针更改为引用可以让生活变得更容易一些。
我认为它可以做得比这更简单,如果这种类型是静态可用的(如使用模板作为选项所暗示的)。 Objective-C对象可以隐式转换为NSObject和/或'id' - C++对象不会(至少没有每个类的自定义代码添加cast操作符)。
函数原型这里由const&
传递参数,因为我已经用Objective-C的类型模板问题通过的Objective-C消息返回的,这似乎工作,其中纯NSObject的*没有。
正在使用@try/@捕获一个选项? – Arcantos 2011-05-19 18:11:24
据我所知,没有。 @ try/@ catch是一个客观的C构造,并且在给定非objectiveC对象时它似乎会抛出。 – 2011-05-19 18:42:54
实际上你是否有一个对象,或者只是一个来自删除类型信息的来源的指针;那可能是一个C++对象的地址或者一些Objective-C对象的ID? – rvalue 2011-10-27 03:26:23