我正在尝试为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
。哪个可以替代?
答案 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);
}