获取它拥有c ++的std :: shared_obj的类型

时间:2017-11-07 17:11:56

标签: c++ c++11 instanceof

我的问题是测试std::shared_ptr以查看它是否属于某种类型。

我正在使用名为instanceof的函数来测试我是否可以执行std::static_pointer_cast<>。问题是当将std :: shared_ptr传递给我的instanceof函数时,它将shared_ptr视为shared_ptr的类型,而不是shared_ptr所持有的数据的实际类型。

类层次结构

Object
   |
   --- Item

通过示例进一步说明。

// Type.h
template <class Base = Object, class Derived>
inline bool instanceof(const std::shared_ptr<Derived>&)
{
   return std::is_base_of_v<Base, Derived>;
}

// ObjectDB.h
class ObjectDB
{
public:
    std::shared_ptr<Object> getObject(const char* obj_name);
}

// main.cpp

auto obj = gObjectDB.getObject("torch");
if (instanceof<Item>(obj))
{
    if (auto item = std::static_pointer_cast<Item>(obj))
    {

    }
}

在上面的示例中,instanceof变为instanceof<Item, Object>,这意味着instanceof将返回false,因为它需要instanceof<Item, Item>。我尝试使用instanceof<Item, std::remove_reference_t<decltype(*obj)>>按照在线的几个来源的建议,但这最终仍然是instanceof<Item, Object>

0 个答案:

没有答案