std :: dynamic_pointer_cast的别名

时间:2018-07-28 15:02:34

标签: c++ c++11 templates

我正在尝试为std::dynamic_pointer_cast创建别名,但无法编写可编译的内容。

这是我尝试的方式:

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

这是怎么了?

编译器错误:

gcc:dynamic_pointer_cast' in namespace 'std' does not name a type'

c语:no type named 'dynamic_pointer_cast' in namespace 'std'

VS:syntax error: identifier 'dynamic_pointer_cast'

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

编辑:正如Brian指出的那样,您只能使用别名类型,而不能使用函数。

我尝试使用以下代码:

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

哪个似乎可以自行编译,但是一旦您尝试调用它,就会出现以下错误:

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

尽管您只能使用一个模板参数来调用std::dynamic_pointer_cast。哪个可以替代?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您必须创建一个新功能:

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