代码之家  ›  专栏  ›  技术社区  ›  tuket

STD:AdvixPo.PiTimes铸件

  •  2
  • tuket  · 技术社区  · 6 年前

    我正在尝试为创建别名 std::dynamic_pointer_cast 但不能写编译的东西。

    我就是这样想的:

    template <typename T1, typename T2>
    using dcast = std::dynamic_pointer_cast<T1, T2>;
    

    怎么了?

    编译器错误:

    海湾合作委员会: dynamic_pointer_cast' in namespace 'std' does not name a type'

    clang: no type named 'dynamic_pointer_cast' in namespace 'std'

    VS: syntax error: identifier 'dynamic_pointer_cast'

    试试看: https://godbolt.org/g/akbqiu

    编辑:正如布莱恩指出的,只能使用别名类型,不能使用函数。

    我尝试了以下代码:

    template <typename T1, typename T2>
    auto& dcast = std::dynamic_pointer_cast<T1, T2>;
    

    它似乎是自己编译的,但一旦您尝试调用它,它会给出以下错误:

    error: wrong number of template arguments (1, should be 2)
    

    你可以打电话 STD:动态的 但是只有一个模板参数。哪一个可以替代?

    1 回复  |  直到 6 年前
        1
  •  1
  •   HolyBlackCat    6 年前

    template <class T, class U> 
    std::shared_ptr<T> dcast(const std::shared_ptr<U> &r) noexcept
    {
        return std::dynamic_pointer_cast<T>(r);
    }