【问题标题】:C++ object's type definition comparison, ignoring the wrong one with compilerC++对象的类型定义比较,用编译器忽略错误的
【发布时间】:2015-04-14 15:29:37
【问题描述】:

我需要一个 if-else 比较来询问其中的对象是否属于某种类型。我还需要编译器忽略错误的行。

所以会是这样的

#if (/* the object is an objectType */)
    object.doSmth();
#else
    object.doSmthElse();
#endif

我有类似的东西

strcmp(typeid(object).name(), "class objectType")==0

但只有 #else 行起作用。

我对比较部分感到困惑。有没有一种正常的方法来定义它?

【问题讨论】:

  • 我觉得你需要的不是更好的继承结构,就是专门的模板函数。
  • #if 是一个预处理器指令。你的意思是if
  • @molbdnilo 否,因为我需要编译器忽略未使用的行。在我的例子中,non-objectType 对象没有 doSmth() 函数,所以它不会使用简单的 if 编译。
  • @MariaDmitrievich 你不能用预处理器做这样的事情,因为预处理甚至在解析之前就已经发生了。您需要在运行时对类型进行某种动态调度。

标签: c++ macros type-deduction


【解决方案1】:

您可以使用函数模板和重载来区分类型:

void doSmth(objectType & object) {object.doSmth();}
template <class Type> void doSmth(Type & object) {object.doSmthElse();}

如果object 的类型为objectType,现在doSmth(object) 将选择第一个,否则选择第二个,如您的伪代码所指定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多